Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Firebird, InterBase Новый топик    Ответить
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
 Re: Экспорт данных в скрипт  [new]
PATRI0T
Member

Откуда: Майкоп
Сообщений: 132
И через IBExpert Тоже не вставляет. Вот таблица куда вставку пытаюсь сделать
CREATE TABLE ORDERS (
    ID                     INTEGER NOT NULL,
    ITM_ORDERNUM           VARCHAR(100) NOT NULL,
    STARTDATE              DATE,
    STATUS_DESCRIPTION     VARCHAR(100) NOT NULL,
    TOTALCOST              NUMERIC(7,2),
    ORDER_PAY              NUMERIC(7,2),
    DEBT                   NUMERIC(7,2),
    DATE_PACK              DATE,
    DATE_OUT               DATE,
    BOX_PACKED             INTEGER,
    BOX_OUT                INTEGER,
    DRIVER_NAME            VARCHAR(100),
    FILEPATH_CALC_CLIENT   VARCHAR(200),
    FILEPATH_CALC_MANAGER  VARCHAR(200),
    FILEPATH_BILL          VARCHAR(200),
    CLIENTNAME             VARCHAR(50) NOT NULL
7 июл 20, 11:23    [22163259]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
o_v_a
Member

Откуда: Тула
Сообщений: 1127
А что вывод select даёт по полям DATE_PACK и DATE_OUT ?
Почему fb_export их прописал как пустые строки?
7 июл 20, 13:58    [22163415]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
PATRI0T
Member

Откуда: Майкоп
Сообщений: 132
m7m,

да, все так. Исправил, получилось.
Даты превращались в пустые строки, когда были Null. Там был select coalesce. Это поубирал, стало норм.
Но, как мне говорили умные люди, импорт оооочень долгий.. Импортирую так:
isql-fb \
	-ch "UTF8" \
	-i $IMPORTSQL \
	-u $USER \
	-p $PASS \
	"$HOST:$DB" 

И 200 записей импортировалось 30 секунд.. я боюсь про 20 тысяч...
Есть какие-нибудь варианты?
7 июл 20, 15:35    [22163502]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50808

PATRI0T
И 200 записей импортировалось 30 секунд..

Ты их что, прямо через интернет импортировал? Надо было файл скрипта перекачать на целевой
сервер и импортировать локально.

Posted via ActualForum NNTP Server 1.5

7 июл 20, 15:41    [22163507]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
o_v_a
Member

Откуда: Тула
Сообщений: 1127
PATRI0T

И 200 записей импортировалось 30 секунд.. я боюсь про 20 тысяч...
Есть какие-нибудь варианты?

Если есть критерии по времени выполнения, то только перенос скрипта на удаленный сервер и выполнение его там как ДС сказал.
Иначе скармливай роботу и нехай себе барабанит хоть несколько часов.
В моём случае роботы раз в сутки этим занимаются. И пускай хоть 24 часа это длится. Мне лично всё равно. Главное, чтоб раз в сутки процесс шёл и доходил до конца.

Сообщение было отредактировано: 7 июл 20, 16:09
7 июл 20, 16:10    [22163531]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
Ivan_Pisarevsky
Member

Откуда: НН
Сообщений: 8597
PATRI0T
репликацией ни разу не пользовался
Время пришло, пора.
7 июл 20, 16:19    [22163534]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
Dimitry Sibiryakov
Member

Откуда:
Сообщений: 50808

o_v_a
Главное, чтоб раз в сутки процесс шёл и доходил до конца.

У него в пятом сообщении заявлен нестабильный интернет, так что фиг он дойдёт до конца.

Posted via ActualForum NNTP Server 1.5

7 июл 20, 16:41    [22163549]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
kdv
Member

Откуда: iBase.ru
Сообщений: 29015
PATRI0T,

для справки. в пустую таблицу чуть поменьше размером записи, без индексов, скриптом, через isql, 1 миллион записей вставляется за 24 секунды. На десктопном компе.
7 июл 20, 18:14    [22163621]     Ответить | Цитировать Сообщить модератору
 Re: Экспорт данных в скрипт  [new]
PATRI0T
Member

Откуда: Майкоп
Сообщений: 132
kdv, да, все получилось. Если импортировать через весь интернет, то мои ~20тыщ записей засасываются 4секунды на слабенькой VPS
Спасибо всем огромное

Получился вот такой скрипт. Вдруг кому еще пригодится
+

#!/bin/bash

#INIT	
	HOST='******'
	DB='******\TEST SOLO.FDB'
	USER='******'
	PASS='******'
	
	EXP_FNAME_ORDERS='fb-export-orders.sql'
	EXP_FNAME_USERS='fb-export-users.sql'
	IMPORTSQL="fb-import.sql"
	
	TESTMODE="first 1" # чтобы быстрее работало в процессе отладки

	SQL_EXPORT_ORDERS="select $TESTMODE
        o.id,
        o.itm_ordernum,
        Coalesce(cast( o.plan_date_firststage as date),'01.01.2000') as StartDate,
        ls.status_description,
        coalesce( o.order_total_cost,0) as TotalCost,
        o.order_pay,
        iif ( o.order_status <7,
            iif(
                COALESCE (o.order_pay,0)>COALESCE (o.order_total_cost,0)*0.5,
                0,
                COALESCE (o.order_total_cost,0)/2-COALESCE (o.order_pay,0)
                ),
            COALESCE (o.order_total_cost,0)-COALESCE (o.order_pay,0)
        ) as Debt,
        ju.date_pack as date_pack,
        jo.fact_date_out as date_out,
        ju.box_count as box_packed,
        jo.box_count as box_out,
        jo.driver_name as driver_name,
        FILEPATH_CALC_CLIENT,
        FILEPATH_CALC_MANAGER,
        FILEPATH_BILL,
        o.client as clientname
    from orders o
            left join journal_upack ju on ju.order_id=o.id
            left join journal_out jo on jo.order_id=o.id
            left join list_statuses ls on ls.status_num=o.order_status
            left join clients c on o.client = c.clientname
    where o.order_status > 0;"

	SQL_EXPORT_USERS="select $TESTMODE
		ID,
		upper(USERNAME) as USERNAME,
		USERROLE,
		PASSWD,
		CLIENTID
    FROM USERS
    WHERE USERROLE = 'client'"

echo ">>>> Export data "
echo "> Export orders table.."

# Orders
fbexport \
	-Si \
	-A "UTF8" \
	-H $HOST \
	-D "$DB"  \
	-U $USER \
	-P $PASS \
	-F $EXP_FNAME_ORDERS \
	-Q "$SQL_EXPORT_ORDERS"

# Users
fbexport \
	-Si \
	-A "UTF8" \
	-H $HOST \
	-D "$DB"  \
	-U $USER \
	-P $PASS \
	-F $EXP_FNAME_USERS \
	-Q "$SQL_EXPORT_USERS"


	echo "Delete from orders;" > $IMPORTSQL
	cat $EXP_FNAME_ORDERS      >> $IMPORTSQL
	cat $EXP_FNAME_USERS       >> $IMPORTSQL
echo ">> OK."


#----------------------------------------	
echo ">>>> Send fbimport file via  scp "

# Import data
	HOST='******'
	USER='******'
	REMOTEFILE='/var/docker/firebird-exchangedir/'
	
	 scp ./$IMPORTSQL  $USER@$HOST:$REMOTEFILE
	 echo ">> OK."
echo ">>>> Import fb-import.sql"
	 ssh  $USER@$HOST sudo docker exec solo-firebird bash /firebird/fb-import.sh
echo "-- DONE --"
7 июл 20, 18:41    [22163640]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: Ctrl  назад   1 [2]      все
Все форумы / Firebird, InterBase Ответить