powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Битовые значения
127 сообщений из 127, показаны все 6 страниц
Битовые значения
    #39606759
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.
Есть поле, тип smallint, назовем его NoPay, в таблице Family
В этом поле хранится десятичное число.
На самом деле это побитное значение из 8 бит: 0 или 1. Последовательность - 7654 3210

1. Возможно ли запросом выбрать все записи у которых бит1 установлено 1, т.е. установлен некий признак.
2. Возможно ли запросом выбрать все записи у которых бит2 установлено 1, т.е. установлен некий признак.
3. Возможно ли запросом выбрать все записи у которых бит3 установлено 1, т.е. установлен некий признак.

Если возможно, покажите пожалуйста на конкретном примере:
select NoPay from Family where ....

--------------------------
Firebird 3.0.1.32609;
IBExpert 2017.3.12.1;
Windows 10 32-bit;
4Gb RAM;
SSD 512Mb + HDD 1 Tb;
Настройки по умолчанию

Среда разработки:
Delphi XE2 + FIBPlus 7.4
...
Рейтинг: 0 / 0
Битовые значения
    #39606762
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Битовые значения
    #39606764
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,
Я нашел ее и читал. Но не понял как :(
Помогите примером пожалуйста
...
Рейтинг: 0 / 0
Битовые значения
    #39606770
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushНа самом деле это побитное значение из 8 бит: 0 или 1. Последовательность - 7654 3210
это что, битовые значения? Что значит "последовательность"? это что, номера битов?
тогда 2^7 + 2^6 + 2^5 и т.д.

https://ru.wikipedia.org/wiki/Двоичная_система_счисления
...
Рейтинг: 0 / 0
Битовые значения
    #39606787
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

akrushЕсли возможно, покажите пожалуйста на конкретном примере:
select NoPay from Family where ....

Код: sql
1.
2.
3.
4.
5.
select NoPay
  from Family
 where bin_and( NoPay, 0x01 ) = 0x01  -- для 0-го бита
 where bin_and( NoPay, 0x02 ) = 0x02  -- для 1-го бита
 where bin_and( NoPay, 0x04 ) = 0x04  -- для 2-го бита


С уважением, Polesov.
...
Рейтинг: 0 / 0
Битовые значения
    #39606853
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov,
спасибо, попробую.
еще вопрос: предположим у меня в битах 4-7 хранится некоторое количество, например 6 (это 0111). а как этой функцией проверить это число?
...
Рейтинг: 0 / 0
Битовые значения
    #39606863
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush в битах 4-7 хранится некоторое количество, например 6 (это 0111)
0111 - это 7. Потому что биты идут справа налево. Но даже если бы они шли слева направо, то это было бы 14.
И в 4-7 битах никак не может храниться ни 7, ни 6.
Потому что
4 бит - 2^4 = 16
5 бит - 2^5 = 32
6 бит - 2^6 = 64
7 бит - 2^7 = 128

p.s. я считаю, что только в 2018 году такое возможно услышать от программиста.
...
Рейтинг: 0 / 0
Битовые значения
    #39606898
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvИ в 4-7 битах никак не может храниться ни 7, ни 6.


Может, конечно. В 4-х битах может храниться любое число, которое влезает в 4 бита :)
Это вопрос представления информации в данном конкретном случае. Может, он там в 8 битах четыре двухбитовых числа хранит. Или два трехбитовых. Или еще как. Не возбраняется.
...
Рейтинг: 0 / 0
Битовые значения
    #39606899
IBExpert
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushеще вопрос: предположим у меня в битах 4-7 хранится некоторое количество, например 6 (это 0111). а как этой функцией проверить это число?

bit_shr(NoPay, 4)
...
Рейтинг: 0 / 0
Битовые значения
    #39606917
Polesov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Привет.

akrushеще вопрос: предположим у меня в битах 4-7 хранится некоторое количество, например 6 (это 0111). а как этой функцией проверить это число?
Исходим из того, что биты нумеруются справа налево начиная с нуля.
Если значение имеет тип SMALLINT - 16 бит, INTEGER - 32 бита.
Для SMALLINT нас интересуют биты, помеченные 1:
Код: sql
1.
0000000011110000


Как узнать, что в указанных битах содержится число 6?
Надо сдвинуть битовое значение вправо на 4, выделить по маске 4 бита и сравнить:
Код: sql
1.
bin_and( bin_shr( NoPay, 4 ), 0x0F ) = 6


P.S. вообще-то 6 = 0110b :-)

С уважением, Polesov.
...
Рейтинг: 0 / 0
Битовые значения
    #39606961
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvp.s. я считаю, что только в 2018 году такое возможно услышать от программиста.

Мне ещё дико интересен характер этой битовой информации. Есть одно подозрение.
...
Рейтинг: 0 / 0
Битовые значения
    #39607119
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Polesov, так и будем решать за студоту домашку? :)
...
Рейтинг: 0 / 0
Битовые значения
    #39607123
Ivan_Pisarevsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Старый плюшевый мишкаМне ещё дико интересен характер этой битовой информации.Есть разница? Автор не понимает, как работает битовая маска, а все туда же экономить на спичках.

Автор, сколько миллиардов записей надо окучить, чтобы стала заметна экономия диска на этих самых битах?
...
Рейтинг: 0 / 0
Битовые значения
    #39607146
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ivan_Pisarevsky,
Увы биты достаются по наследству при конвертации Клариона в Огнептица.
В таблицах куча полей с побитной "шифровкой". Вот и приходится изгаляться чтобы расписать их на разные столбцы.
Всегда это делал перебором каждой строки + Делфи.
Задался вопросом, а можно ли сразу запросом.

Принципиально ответ уже получил - МОЖНО.
Как я понял можно даже сразу update написать который махом все пропишет.
Теперь буду "курить бамбук" и "грызть гранит науки", чтобы понять как эти битовые маски работают.

Спасибо за примеры. Увы вопросы будут еще появляться и я буду их задавать
...
Рейтинг: 0 / 0
Битовые значения
    #39607149
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devPolesov, так и будем решать за студоту домашку? :)

Неужели вы думаете, что если человеку что-то непонятно, - это студент которому лень в чем-то разбираться?
Да мне тяжело давались и даются разные системы счисления.
Но это не повод вешать клеймо "студота" и "домашка"
...
Рейтинг: 0 / 0
Битовые значения
    #39607162
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush> В таблицах куча полей с побитной "шифровкой".
akrush> Вот и приходится изгаляться чтобы расписать их на разные столбцы.

А, так это ты из гамна кофетку пытаешься сделать.
Это дело бравое, Бог в помощь. Только не забудь
потом оттестировать, чтобы не получилось, что
перевёл рабочий (хоть и ужасный) гомнокод (БД)
в красивый, но неправильный.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39607189
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустам,
Я проверяю. У меня есть контрольный список строк
...
Рейтинг: 0 / 0
Битовые значения
    #39607219
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов Рустамakrush> В таблицах куча полей с побитной "шифровкой".
akrush> Вот и приходится изгаляться чтобы расписать их на разные столбцы.

А, так это ты из гамна кофетку пытаешься сделать.
Это дело бравое, Бог в помощь. Только не забудь
потом оттестировать, чтобы не получилось, что
перевёл рабочий (хоть и ужасный) гомнокод (БД)
в красивый, но неправильный.


В файл-серверных базах, видимо, обычное поведение. Экономили на размере самой базы, а индексы и так фигово работали (работают). Правильно делает, что схему данных меняет. Зачёт!
...
Рейтинг: 0 / 0
Битовые значения
    #39607241
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush, если я не прав, приношу извинения! :)

С системами счисления всё элементарно!
В десятичной системе счисления по основанию 10 имеем следующие разряды числа:
Разряд 0 (единицы): N*10 0
Разряд 1 (десятки): N*10 1
Разряд 2 (сотни): N*10 2
Разряд 3 (тысячи): N*10 3
и т.д., где N - значение в разряде от 0 до 9

В двоичной системе счисления по основанию 2 имеем следующие разряды:
Разряд 0 (единицы): N*2 0
Разряд 1 (двойки): N*2 1
Разряд 2 (четвёрки): N*2 2
Разряд 3 (восьмёрки): N*2 3
и т.д., где N - значение в разряде 0 или 1
Как видим, двоичная система еще проще и установленные в 1 биты в машинном слове (16 бит) можно сконвертировать в десятичную систему по следующей таблице:
Код: plaintext
1.
2.
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
|32768|16384| 8192| 4096| 2048| 1024|  512|  256|  128|   64|   32|   16|    8|    4|    2|    1|
+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+-----+
...
Рейтинг: 0 / 0
Битовые значения
    #39607262
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Да неправда! Если в первом и втором бите стоят единицы, то в десятичной системе это 3 (три). Без побитовых операций никуда!
...
Рейтинг: 0 / 0
Битовые значения
    #39607276
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, что "неправда"? Если, к примеру, в установлены в 1 разряды 0,3,5,10, то это 1+8+32+1024=1065
...
Рейтинг: 0 / 0
Битовые значения
    #39607293
Фотография Старый плюшевый мишка
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushIvan_Pisarevsky,
Увы биты достаются по наследству при конвертации Клариона в Огнептица.
В таблицах куча полей с побитной "шифровкой". Вот и приходится изгаляться чтобы расписать их на разные столбцы.


Я так и думал. Через это приходится проходить почти всем, кто успел наработать что-то полезное на плоских БД. Советую ещё подумать о том, чтобы организовать нормальную структуру - свести значения в нечисловых столбцах в таблицы-справочники и в столбцах рабочих таблиц использовать ссылки.
...
Рейтинг: 0 / 0
Битовые значения
    #39607336
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Это правда. Зачем таблица-то? Я просто не понял её назначения. Видимо, просто азы. Которые все знают. Но они неприменимы в современной реальной жизни.
...
Рейтинг: 0 / 0
Битовые значения
    #39607340
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, чтобы человеку, совершенно не знакомому с азами бинарной системы счисления, было проще ориентироваться - какой бит машинного слова какому десятичному числу соответствует без использования калькулятора в режиме "Программист".

> Но они неприменимы в современной реальной жизни.

Почему неприменимы? Что-то в битовой системе счисления принципиально изменилось? Для понимания принципов вполне подойдет.
...
Рейтинг: 0 / 0
Битовые значения
    #39607347
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devкакой бит машинного слова какому десятичному числу соответствуетДля битовой маски бесполезные знания.
rdb_devДля понимания принципов вполне подойдет.Человеку нужно кларион отфайрбёрдить, а не общие принципы обкатывать, вроде как.
...
Рейтинг: 0 / 0
Битовые значения
    #39607348
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
26.02.2018 15:23, WildSery пишет:
> Человеку нужно кларион отфайрбёрдить

хорошее выражение.
ёмкое!
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39607394
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Спасибо всем кто откликнулся.
Что-то начинает вырисовываться.
Например если мне нужно прочитать только один бит (например 6) из 8, я делаю сначала смещение на 5 бит (bin_shr(relat,5)), а затем читаю значение 6 бита - bin_and(...,0x01).

Если мне надо прочитать 4 бита, начиная с 5 позиции, я должен сместиться на 4 бита bin_shr(relat,4), а затем прочитать значение следующих 4 бит: bin_and(...,0x0f).

Если я ошибаюсь - поправьте меня.
Но на том примере, где мне это надо было,
проверив контрольные значения, получается все правильно.
...
Рейтинг: 0 / 0
Битовые значения
    #39607402
Фотография makhaon
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мимопроходящий,

Краткость - сестра, да.

akrush,
авторЯ нашел ее и читал. Но не понял как :(
Помогите примером пожалуйста

авторЕсли я ошибаюсь - поправьте меня.

Читай азы - битовые операции (прямо вот так можешь и вбивать в гугл). Не нужно никуда ничего двигать. Материала в сети, я думаю, вагон и тележка. И с картинками и с описанием. И даже видео.
...
Рейтинг: 0 / 0
Битовые значения
    #39607408
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Всё верно.
...
Рейтинг: 0 / 0
Битовые значения
    #39607413
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Вот так попробуй. Твоё число Value. Если bin_and (Value, 1) возвращает не ноль, то первый (нулевой) бит 1. Если bin_and (Value, 2) возвращает не ноль, то второй бит 1. Если bin_and (Value, 4) возвращает не ноль, то третий бит 1. Если bin_and (Value, 8) возвращает не ноль, то четвёртый бит 1. И т.д. На каждое восьмибитовое число нужно восемь раз наложить маску типа "00001000". Битовая операция "И" возвращает единицу, если оба числа с единицей (в смысле бита).
...
Рейтинг: 0 / 0
Битовые значения
    #39607476
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI,
спасибо, но я так понимаю это больше подходит если мне надо сравнивать.
а мне надо просто расписать все биты по столбцам и потом я от битовых полей хочу избавится.
...
Рейтинг: 0 / 0
Битовые значения
    #39607551
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush> а мне надо просто расписать все биты по столбцам и потом я от битовых полей хочу избавится.

Ну так и расписывай.

firebird_smart_field_bit_1 = bin_and(clarion_shit_field, 1);
firebird_smart_field_bit_2 = bin_and(clarion_shit_field, 2);
firebird_smart_field_bit_3 = bin_and(clarion_shit_field, 4);
firebird_smart_field_bit_4 = bin_and(clarion_shit_field, 8);
...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39607612
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushНапример если мне нужно прочитать только один бит (например 6) из 8, я делаю сначала смещение на 5 бит (bin_shr(relat,5)), а затем читаю значение 6 бита - bin_and(...,0x01).Во-первых, смещать вправо надо не на 5, а на 4, а во вторых - занафига? Тебе его надо проверить как флаг, а не превратить в числовое значение все биты слева, включая пятый. Выставленному в единицу пятому биту соответствует десятичное число 32 (см. таблицу) или шестнадцатеричное 0x10. Всё проще!
Код: sql
1.
flag_bit5 = Iif(bin_AND(relat, 32), TRUE, FALSE)
...
Рейтинг: 0 / 0
Битовые значения
    #39607613
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryrdb_devкакой бит машинного слова какому десятичному числу соответствуетДля битовой маски бесполезные знания.Что, как не битовую маску в десятичном представлении, я использовал сообщением выше?
...
Рейтинг: 0 / 0
Битовые значения
    #39607614
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devakrushНапример если мне нужно прочитать только один бит (например 6) из 8, я делаю сначала смещение на 5 бит (bin_shr(relat,5)), а затем читаю значение 6 бита - bin_and(...,0x01).Во-первых, смещать вправо надо не на 5, а на 4, а во вторых - занафига? Тебе его надо проверить как флаг, а не превратить в числовое значение все биты слева, включая пятый. Выставленному в единицу пятому биту соответствует десятичное число 32 (см. таблицу) или шестнадцатеричное 0x10. Всё проще!
Код: sql
1.
flag_bit5 = Iif(bin_AND(relat, 32), TRUE, FALSE)

Мипардон! СИшная привычка не писать в операторе условия "> 0"...
Код: sql
1.
flag_bit5 = Iif(bin_AND(relat, 32) > 0, TRUE, FALSE)
...
Рейтинг: 0 / 0
Битовые значения
    #39607617
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devВо-первых, смещать вправо надо не на 5, а на 4Чот я совсем зарапортавался... На 5!
...
Рейтинг: 0 / 0
Битовые значения
    #39607620
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devили шестнадцатеричное 0x10 Как же неподецки может плющить с утра...
0x20, конечно же!
...
Рейтинг: 0 / 0
Битовые значения
    #39607628
Basil A. Sidorov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предварительный просмотр и перечитать.
После каждой правки и с небольшим интервалом.

P.S. Была с старом "Вокруг света" небольшая заметка о селькупах (северная народность).
Называлась "Жду стою".
Сбор в дорогу занимал два-три дня и несколько часов перед выездом полностью готовый путешественник просто сидел на нартах.
Зачем?Жду, стою. Может я что забыл, может кому другому что понадобится.
...
Рейтинг: 0 / 0
Битовые значения
    #39607638
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devЧто, как не битовую маску в десятичном представлении, я использовал сообщением выше?Я о том и говорю, что ты один такой здесь.
Если нужно найти N-ный бит, нормальные люди его формулой находят 2^(N-1), ну или битовым сдвигом bin_shr, а не по табличке пальцем ищут.

У тебя, наверное, и в коде написано что-то вроде (для наглядности) ?
Код: sql
1.
2.
3.
4.
5.
case bit_number of
  when 1 then bit_and(NoPay, 1)
...
  when 5 then bit_and(NoPay, 16)
...
...
Рейтинг: 0 / 0
Битовые значения
    #39607663
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, я нифига не понимаю. Какой еще "bit_number"? Если выставлено, скажем, три первых бита, надо в кейсе описать все 8 вариантов комбинаций?
...
Рейтинг: 0 / 0
Битовые значения
    #39607680
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryУ тебя, наверное, и в коде написано что-то вроде (для наглядности) ?
Код: sql
1.
2.
3.
4.
5.
case bit_number of
  when 1 then bit_and(NoPay, 1)
...
  when 5 then bit_and(NoPay, 16)
...

А, я понял - "bit_number", это счетчик сдвигов и для каждого сдвига ты предлагаешь описать условие в кейсе? Тогда не понятно, нафига городить огород с bit_and на каждый бит в отдельности. Уж проще, тогда, как-то так:
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
bit_number = 0;
shift = NoPay;
WHILE (:bit_number < 32) DO
  BEGIN
    shift = bit_SHR(shift, 1);
    IF (:bit_number == 0) THEN
      flag_bit0 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 1) THEN
      flag_bit1 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 2) THEN
      flag_bit2 = bit_AND(shift, 1);
    .
    .
    .
    bit_number = bit_number + 1;
  END


Не многовато ли писанины? Куда проще:
Код: sql
1.
2.
3.
4.
5.
6.
7.
flag_bit0 = Iif(bit_AND(NoPay, 1) > 0, 1, 0);
flag_bit1 = Iif(bit_AND(NoPay, 2) > 0, 1, 0);
flag_bit2 = Iif(bit_AND(NoPay, 4) > 0, 1, 0);
flag_bit3 = Iif(bit_AND(NoPay, 8) > 0, 1, 0);
flag_bit4 = Iif(bit_AND(NoPay, 16) > 0, 1, 0);
flag_bit5 = Iif(bit_AND(NoPay, 32) > 0, 1, 0);
<и т.д.>
...
Рейтинг: 0 / 0
Битовые значения
    #39607708
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
[quot rdb_dev]
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
bit_number = 0;
shift = NoPay;
WHILE (:bit_number < 32) DO
  BEGIN
    shift = bit_SHR(shift, 1);
    IF (:bit_number == 0) THEN
      flag_bit0 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 1) THEN
      flag_bit1 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 2) THEN
      flag_bit2 = bit_AND(shift, 1);
    .
    .
    .
    bit_number = bit_number + 1;
  END


Так!
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
bit_number = 0;
shift = NoPay;
WHILE (:bit_number < 32) DO
  BEGIN
    IF (:bit_number == 0) THEN
      flag_bit0 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 1) THEN
      flag_bit1 = bit_AND(shift, 1);
    ELSE IF (:bit_bumber == 2) THEN
      flag_bit2 = bit_AND(shift, 1);
    .
    .
    .
    shift = bit_SHR(shift, 1);
    bit_number = bit_number + 1;
  END
...
Рейтинг: 0 / 0
Битовые значения
    #39607710
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Basil A. Sidorov, так и у нас "посидим на дорожку" не спроста! :)
...
Рейтинг: 0 / 0
Битовые значения
    #39607727
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вместо bin_and уже пошёл bit_and. Чем дальше в лес...
...
Рейтинг: 0 / 0
Битовые значения
    #39607753
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXIВместо bin_and уже пошёл bit_and. Чем дальше в лес... Да, капец ваще! Не приведи Господь вам такую работёнку, как у меня сейчас... Полный [ЦЕНЗУРА]!
...
Рейтинг: 0 / 0
Битовые значения
    #39607847
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_devТогда не понятно, нафига городить огород с bit_and на каждый бит в отдельности. Уж проще, тогда, как-то так:Ну то есть ты признаёшь, что твоя "таблица десятичных значений" в реальной жизни не применима?
...
Рейтинг: 0 / 0
Битовые значения
    #39607874
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSeryrdb_devТогда не понятно, нафига городить огород с bit_and на каждый бит в отдельности. Уж проще, тогда, как-то так:Ну то есть ты признаёшь, что твоя "таблица десятичных значений" в реальной жизни не применима?А это, по твоему что, как не та же самая связка "номер разряда"<=>"десятичное значение"?
Код: sql
1.
2.
3.
4.
5.
6.
7.
flag_bit0 = Iif(bin_AND(NoPay, 1) > 0, 1, 0);
flag_bit1 = Iif(bin_AND(NoPay, 2) > 0, 1, 0);
flag_bit2 = Iif(bin_AND(NoPay, 4) > 0, 1, 0);
flag_bit3 = Iif(bin_AND(NoPay, 8) > 0, 1, 0);
flag_bit4 = Iif(bin_AND(NoPay, 16) > 0, 1, 0);
flag_bit5 = Iif(bin_AND(NoPay, 32) > 0, 1, 0);
<и т.д.>
...
Рейтинг: 0 / 0
Битовые значения
    #39607936
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, лучше бы поправил мою потенциальную ошибку, которая может всплыть при установленном в smallint самом старшем бите (при отрицательных числах), помятуя про конвертацию smallint в bigint.
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
flag_bit0 = Iif(bin_AND(NoPay, 1) != 0, 1, 0);
flag_bit1 = Iif(bin_AND(NoPay, 2) != 0, 1, 0);
flag_bit2 = Iif(bin_AND(NoPay, 4) != 0, 1, 0);
flag_bit3 = Iif(bin_AND(NoPay, 8) != 0, 1, 0);
flag_bit4 = Iif(bin_AND(NoPay, 16) != 0, 1, 0);
flag_bit5 = Iif(bin_AND(NoPay, 32) != 0, 1, 0);
.
.
.
flag_bit15 = Iif(bin_AND(NoPay, 0x8000000000000000) != 0, 1, 0);
...
Рейтинг: 0 / 0
Битовые значения
    #39608927
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Ты тут дурочку валяешь, а мне ещё и поправлять? Ты знаешь, куда.
...
Рейтинг: 0 / 0
Битовые значения
    #39609087
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, не всёж банхаммером махать!
...
Рейтинг: 0 / 0
Битовые значения
    #39609105
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdb_dev,

Скорее, веником. А иногда и совочком.
...
Рейтинг: 0 / 0
Битовые значения
    #39609141
rdb_dev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, а как ты хотел? Иногда за гостями и прибраться нужно.
...
Рейтинг: 0 / 0
Битовые значения
    #39637025
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Чтобы не плодить темы, хочу продолжить тут.
Суть вопроса. Мне надо, как выразился WildSery
WildSery... нужно кларион отфайрбёрдить ...

Пользуюсь компонентом SMImport. Его я обсуждать не хочу. Компонент нормально импортирует данные, поля массивы передает как стринг с разделителем ; и мне этого достаточно.
Но возникла такая проблема.
1. Кларион хранит дату как число дней от 28/12/1800, т.е. сегодняшнее число, 26/04/2018, хранится как 79377.
для того чтобы преобразовать в нормальное число формата ФБ мне надо выполнить dateadd(day,-36161,ZVDATA)
2. При импорте, если поле пустое, компонент ничего не передает и в поле, соответственно null - для стринга мне надо сделать просто пусто '', делаю это так: update ADDSUM set OWN_NUM='' where OWN_NUM is null;

В целом все нормально, но на больших таблицах эта обработка ЖУТКО тормозит. Посмотреть статистику вижу в версиях количество равное количеству строк в таблице.

Суть вопроса следующая: должна ли создаваться версия если я единственный подключенный пользователь.
Думал компонент глючит, проверил. Компонент комитит каждую строку (это я обсуждать пока не буду, автору напишу).
После импорта даже пробовал отключаться и подключаться к БД.
Все равно создаются версии.

Может я что-то напутал и версии ДОЛЖНЫ создаваться. Пните в нужном направлении.
...
Рейтинг: 0 / 0
Битовые значения
    #39637027
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
Забыл уточнить - версия ФБ Firebird-3.0.2.32703_0_Win32
...
Рейтинг: 0 / 0
Битовые значения
    #39637033
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
С версиями вопрос отпал. В Эксперте попробовал выполнить тот же набор команд на апдейт - версии тоже появились. Так что сам где-то что-то напутал.
...
Рейтинг: 0 / 0
Битовые значения
    #39637036
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushПните в нужном направлении.

http://www.ibase.ru/transactions/ обязательное чтение. До просветления.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39637055
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushВ целом все нормально, но на больших таблицах эта обработка ЖУТКО тормозит.Размер кеша какой ?
...
Рейтинг: 0 / 0
Битовые значения
    #39637071
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushВсе равно создаются версии.
что за стенания? при update записи создается версия. И при delete. А как иначе?
Обновили 100к записей - будет 100к записей и 100к версий. Это нормально. Ненормально, это когда активные транзакции препятствуют превращению версий в мусор и их уборке, и когда у одной записи десятки, сотни, тысячи или вообще миллионы версий.
Вот тогда - да, может тормозить.

akrushСуть вопроса следующая: должна ли создаваться версия если я единственный подключенный пользователь.
У Firebird нет "однопользовательского" режима. Один, сто, тыща юзеров - все делается всегда одинаково.
...
Рейтинг: 0 / 0
Битовые значения
    #39637098
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush, "...нужно кларион отфайрбёрдить..."

В 96-м году встала такая задача. В итоге появилась консольная прога, которая берет произвольный файл *.dat и конвертит его в *.txt (за исключением memo-полей).

Плюсом рожает файлик со следующим содержимым:

Код: sql
1.
2.
3.
4.
5.
6.
create table tmp08A1c external file 'D:\Database\Dbtemp\Cvt_asci\Pens_arm\2008\A1c.txt' (
  fRN char(9),
  fSP char(1),
  fEOL char(3));

commit;



Скармливаем этот файл фаеру и получаем внешнюю таблицу. Все дальнейшее зависит от фантазии. К примеру:

Код: sql
1.
2.
insert into tbInternalTable (fField0, fField1)
select fRN, fSP from tmp08A1c where fSP <> '5'



Итог работы:
...
Рейтинг: 0 / 0
Битовые значения
    #39637111
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvlad,
Влад, все по умолчанию.
Импортируется суммарно, в данном тесте, более 10млн строк в 25 таблиц. Могут быть варианты и где будет более 20млн.
Подскажите какие настройки подправить чтобы ускорить процесс, если возможно
...
Рейтинг: 0 / 0
Битовые значения
    #39637112
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,
Спасибо за подсказку. Попробую.
...
Рейтинг: 0 / 0
Битовые значения
    #39637140
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushПопробую.

ftp://locksmithpc.asuscomm.com/dat2txt.7z
...
Рейтинг: 0 / 0
Битовые значения
    #39637184
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

А у Вас тип файла БД dat или tps? Эксперт dat закачивает сам.
...
Рейтинг: 0 / 0
Битовые значения
    #39637187
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, эксперт вроде дох как раз на полях массивах.
...
Рейтинг: 0 / 0
Битовые значения
    #39637195
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

Я знаю, что работает. Глубоко не копал, массивы редко используют. И вообще, ИМХО, использовать массивы в БД - дурацкое дело.
...
Рейтинг: 0 / 0
Битовые значения
    #39637199
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, пробую сейчас грузить 600 Мб dat-файл. скорость примерно 100 записей в секунду. печаль.
...
Рейтинг: 0 / 0
Битовые значения
    #39637213
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

Что Вы там в 600 мегов запихали? Есть офигительные МЕМО-поля?
...
Рейтинг: 0 / 0
Битовые значения
    #39637224
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, никаких мемо, только цифры. большой архив со времен царя гороха
...
Рейтинг: 0 / 0
Битовые значения
    #39637226
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushВ целом все нормально, но на больших таблицах эта обработка ЖУТКО тормозит
...
Подскажите какие настройки подправить чтобы ускорить процессУвеличить кеш, подумать о наличии лишних индексов, триггеров.
Избавиться от коммита каждой строки.
Убедиться, что используются препарированные запросы.
FW=OFF на время импорта, если нет противопоказаний.

Всё это банально и давно всем известно.
...
Рейтинг: 0 / 0
Битовые значения
    #39637234
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

Сколько записей? Мне просто интересно. Было принято делить на периоды. Конечно для файл-серверной системы 600 мегов - запредельно много.
...
Рейтинг: 0 / 0
Битовые значения
    #39637251
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, ~700 к записей. 122 поля. 99% double precision
...
Рейтинг: 0 / 0
Битовые значения
    #39637274
KreatorXXI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCKreatorXXI, ~700 к записей. 122 поля. 99% double precision

Реально круто! Особенно, 122 поля. Эксперту ой как тяжело это переварить.
...
Рейтинг: 0 / 0
Битовые значения
    #39637310
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
KreatorXXI, наверняка не предел по кол-ву полей. лень смотреть остальные таблицы
...
Рейтинг: 0 / 0
Битовые значения
    #39637491
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladakrushВ целом все нормально, но на больших таблицах эта обработка ЖУТКО тормозит
...
Подскажите какие настройки подправить чтобы ускорить процессУвеличить кеш, подумать о наличии лишних индексов, триггеров.
Избавиться от коммита каждой строки.
Убедиться, что используются препарированные запросы.
FW=OFF на время импорта, если нет противопоказаний.

Всё это банально и давно всем известно.

Так как это у меня промежуточная таблица только для импорта Кларион-ФБ индексов нет совсем. Вообще нет ничего кроме таблиц. ни ограничений на поля, ничего.

Подскажите - какие параметры надо поменять чтобы увеличить кеш.
Подскажите точное название параметра FW
комит выставил каждые 5000 записей. Раньше я ошибся был каждые 300
Данные (даты, нул в строках) редактирую через скрипт, просто список команд которые надо выполнить. Последняя команда commit;
...
Рейтинг: 0 / 0
Битовые значения
    #39637495
Фотография kdv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

при инсерте кэш никак не влияет. Кэш вообще надо выставлять сообразно архитектуре и экспериментально - классик от 512 до 2048, суперклассик от 512 до 4096, суперсервер от 8192 до половины RAM.
...
Рейтинг: 0 / 0
Битовые значения
    #39637506
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushТак как это у меня промежуточная таблица только для импорта Кларион-ФБ индексов нет совсем. Вообще нет ничего кроме таблиц. ни ограничений на поля, ничего.

Подскажите - какие параметры надо поменять чтобы увеличить кеш.Если индексов нет, то увеличение кеша ничего не даст.

akrushПодскажите точное название параметра FWForced Writes
...
Рейтинг: 0 / 0
Битовые значения
    #39637513
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
kdvakrush,

при инсерте кэш никак не влияет. Кэш вообще надо выставлять сообразно архитектуре и экспериментально - классик от 512 до 2048, суперклассик от 512 до 4096, суперсервер от 8192 до половины RAM.

Влад написал увеличить, поэтому и спрашиваю.
Там не только инсер, а еще и изменение дат (-36161 день) и все текстовые поля замена Нул

Размер страницы 8192
Архитектура: ServerMode = Super
Платформа: Вин10 32бита

Все параметры по умолчанию. подскажите может что-то изменить.
Там нашел параметр #CpuAffinityMask = 0. Он влияет на использование именно процессора или на ядра. Подскажите, плиз :'(
...
Рейтинг: 0 / 0
Битовые значения
    #39637516
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
у меня проц i7, 4 потока
...
Рейтинг: 0 / 0
Битовые значения
    #39637529
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushТам нашел параметр #CpuAffinityMask = 0. Он влияет на использование именно процессора или на ядра. Подскажите, плиз :'(

это не трогай!
...
Рейтинг: 0 / 0
Битовые значения
    #39637545
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush..........
Влад написал увеличить, поэтому и спрашиваю.
.........
Ну он еще писал
Убедиться, что используются препарированные запросы.и это пожалуй сейчас важнее кеша
...
Рейтинг: 0 / 0
Битовые значения
    #39637548
Гаджимурадов Рустам
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Да какие препарированные запросы, он же написал "текстовый скрипт".
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39637556
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
m7m,
Препарированных запросов нет.
Есть скрипт, выглядит вот так (по одной из таблиц):

update APPLIC set DATA_SG=dateadd(day,-36161,DATA_SG);');
update APPLIC set DATA_RG=dateadd(day,-36161,DATA_RG);');
update APPLIC set DATA_R=dateadd(day,-36161,DATA_R);');
update APPLIC set DATA_C=dateadd(day,-36161,DATA_C);');
update APPLIC set DATA_S=dateadd(day,-36161,DATA_S);');
update APPLIC set DATA_E=dateadd(day,-36161,DATA_E);');
update APPLIC set DATA_X=dateadd(day,-36161,DATA_X);');
update APPLIC set DATA_Y=dateadd(day,-36161,DATA_Y);');
update applic set data_sg=null where data_sg<cast('01.01.1950' as DATE);');
update applic set data_rg=null where data_rg<cast('01.01.1950' as DATE);');
update applic set data_r=null where data_r<cast('01.01.1950' as DATE);');
update applic set data_c=null where data_c<cast('01.01.1950' as DATE);');
update applic set data_s=null where data_s<cast('01.01.1950' as DATE);');
update applic set data_e=null where data_e<cast('01.01.1950' as DATE);');
update applic set data_x=null where data_x<cast('01.01.1950' as DATE);');
update applic set data_y=null where data_y<cast('01.01.1950' as DATE);');
update APPLIC set SURN1='' where SURN1 is null;');
update APPLIC set SURN2='' where SURN2 is null;');
update APPLIC set F_NAM='' where F_NAM is null;');
update APPLIC set M_NAM='' where M_NAM is null;');
update APPLIC set INDX='' where INDX is null;');
update APPLIC set BLD_NUM='' where BLD_NUM is null;');
update APPLIC set CORP_NUM='' where CORP_NUM is null;');
update APPLIC set FLAT='' where FLAT is null;');
update APPLIC set PHONE='' where PHONE is null;');
update APPLIC set PLACE='' where PLACE is null;');
update APPLIC set RIZNE='' where RIZNE is null;');
update APPLIC set SUR_NAM=SURN1||SURN2;');
commit;
...
Рейтинг: 0 / 0
Битовые значения
    #39637558
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
в конце примера запроса лишняя " ');"
просто копипастил из делфей
...
Рейтинг: 0 / 0
Битовые значения
    #39637562
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

ну вот для update кеш уже важен.

Кстати вот для этого

Код: sql
1.
2.
3.
update APPLIC set DATA_SG=dateadd(day,-36161,DATA_SG);
update APPLIC set DATA_RG=dateadd(day,-36161,DATA_RG);
...



можно и в один запрос собрать

Код: sql
1.
2.
3.
4.
update APPLIC 
set 
  DATA_SG=dateadd(day,-36161,DATA_SG),
  DATA_RG=dateadd(day,-36161,DATA_RG), ....;
...
Рейтинг: 0 / 0
Битовые значения
    #39637592
hvlad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushЕсть скрипт, выглядит вот такВсе эти апдейты нужно заменить одним, это же ужас-ужас, а не скрипт
...
Рейтинг: 0 / 0
Битовые значения
    #39637632
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
"APPLIC" - Это та самая External table - или уже таблицы внутри БД Firebird ?
...
Рейтинг: 0 / 0
Битовые значения
    #39637637
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hvladВсе эти апдейты нужно заменить одним

Это не так просто, там зависимые значения....

Код: sql
1.
2.
3.
4.
update APPLIC set SURN1='' where SURN1 is null;
update APPLIC set SURN2='' where SURN2 is null;
....
update APPLIC set SUR_NAM=SURN1||SURN2;



а это, кажетсЯ, как раз в FB2 правили, чтобы "в лоб" не работало как в IB времена.
и после переписывания с "денормализацией" скрипт будет запутанный до чертиков.

Это на PSQL надо делать, бежать в цикле, в цикле неспеша и с удобством отрабатывать временные переменные, в конце цикла из них один UPDATE по курсору (fb2) или по RDB$DB_KEY (fb3)
...
Рейтинг: 0 / 0
Битовые значения
    #39637640
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,

она никак не может быть External table, ибо для них UPDATE не поддерживается
...
Рейтинг: 0 / 0
Битовые значения
    #39637641
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushupdate APPLIC set SUR_NAM=SURN1||SURN2;');

"ПетровВодкин" слитно, без пробелов и дефисов ?
...
Рейтинг: 0 / 0
Битовые значения
    #39637643
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

ну тогда эти преобрзаования надо делать на этапе импорта из ET в SQL-таблицу.

PSQL-блок, FOR-SELECT из ET - и уже чистые, переработанные записи в INSERT.

И возможно иногда внутри этого цикла делать snapshot, не знаю ,поможет ли это кэшу или наоборот.

или можно в FOR-SELECT из ET добавлять FIRST/SKIP и гнать в автономных транзакциях по 10 тыс. строк
...
Рейтинг: 0 / 0
Битовые значения
    #39637652
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochЭто не так просто, там зависимые значения....

Да, придётся документацию про COALESCE() читать. Это непосильная задача для аффтара.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Битовые значения
    #39637665
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakov,

дело не в поиске функции, а в копипасте, в денормализации кода

вместо одного вызова case/coalesce/where на столбец - придется делать два.

КАЖЕТСЯ больше там внутренних зависимостей нет, если я не пропустил и если в скрипт больше ничего не добавится.

небольшая копипаста управляема, ЕСЛИ не понадобится усложнить задачу
иначе копипаста может пойти в 2 слоя, три слоя и разрастатся соответственно
...
Рейтинг: 0 / 0
Битовые значения
    #39637667
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ariochakrushupdate APPLIC set SUR_NAM=SURN1||SURN2;');

"ПетровВодкин" слитно, без пробелов и дефисов ?

Извините, но я не приводил структуру таблицы.
В кларион поле фамилия разбито на 2: 7 символов (и по ним строится ключ для поиска по фамилии) + 23 символа остаток от фамилии.
Вот я из и прикручиваю слитно.

Вот структура временной таблицы (в которую тупо импортирую, а потом будет разбор по нескольким таблицам):

CREATE TABLE APPLIC (
APP_NUM BIGINT,
CAL_NUM SMALLINT,
CAL_LAST SMALLINT,
US_ID SMALLINT,
SUR_NAM VARCHAR(30),
SURN1 VARCHAR(7),
SURN2 VARCHAR(23),
F_NAM VARCHAR(25),
M_NAM VARCHAR(20),
INDX VARCHAR(6),
VUL_COD INTEGER,
BLD_NUM VARCHAR(7),
CORP_NUM VARCHAR(2),
FLAT VARCHAR(9),
PHONE VARCHAR(7),
PLACE VARCHAR(1),
RIZNE VARCHAR(10),
NUMB SMALLINT,
INCOM DECIMAL(9,2),
OWN_FRM SMALLINT,
HOSTEL SMALLINT,
CM_AREA DECIMAL(6,2),
NM_AREA DECIMAL(6,2),
BALC DECIMAL(5,2),
AD_AREA DECIMAL(5,2),
FROG DECIMAL(5,2),
FRUG DECIMAL(5,2),
FL_PAY DECIMAL(9,2),
NM_PAY DECIMAL(9,2),
NM_PAY1 DECIMAL(9,2),
CFG_JKP SMALLINT,
CFG_SGTP SMALLINT,
DEBT SMALLINT,
RES1 SMALLINT,
RES2 INTEGER,
RES3 INTEGER,
RES4 SMALLINT,
SUBSID DECIMAL(9,2),
SUBSUD DECIMAL(9,2),
SUBSID1 DECIMAL(9,2),
RITE1 INTEGER,
RITE2 INTEGER,
RITE3 INTEGER,
RITE4 INTEGER,
RITE5 INTEGER,
REEK BIGINT,
DATA_SG DATE,
DATA_RG DATE,
DATA_R DATE,
DATA_C DATE,
DATA_S DATE,
DATA_E DATE,
DATA_X DATE,
DATA_Y DATE,
MARK SMALLINT,
STOP SMALLINT
);

В этой таблице 56 столбцов, из них 12 битовых полей от 4 до 16 значений записано по битно. Если их расписать все по полям (я пробовал) получается более 150 столбцов. Сама таблица уже разбита на несколько
...
Рейтинг: 0 / 0
Битовые значения
    #39637672
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
Имею ввиду в финальной БД таблица APPLIC разбита на 4 таблицы, но финальная структура еще обсуждается.
Если у вас всех можно попросить совета, какую структуру лучше всего сделать - я с удовольствием поделюсь ссылкой на структуру (она у меня в HTML) и с еще большим удовольствием выслушаю советы.
...
Рейтинг: 0 / 0
Битовые значения
    #39637721
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
1. Преобразования данных в вашем скрипте - тривиальны
2. Преобразования каждой конкретной записи - если брать только расчёты, за вычетом чтения с диска и записи на диск - практически мгновенны
3. Ваша пробелма - огромный объём данных и многократная их обработка
4. Каждая команда вашего скрипта, если очень грубо, проводит полное копирование (в смысле чтение+запись) таблицы. А команд 28.

Вывод - вам нужно объединить импорт данных в Firebird и преобразование (расчёт).
Тогда копирование данных будет выполняться один раз, вместо 28.

Прочитали строку из External Table в переменные, в тех же переменных преобразовали, вставили в таблицу Firebird уже готовые преобразованные данные, перешли к следующей строке.

21374800
...
Рейтинг: 0 / 0
Битовые значения
    #39637723
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushВот я из и прикручиваю слитно.

В частности, чтобы их "прикручивать слитно" совершенно не нужны в таблице APPLIC два столбца SURN1 и SURN2 - зачем они там?

Оставьте только SUR_NAM. И записывайте в него уже посчитанное объединённое значение.
...
Рейтинг: 0 / 0
Битовые значения
    #39637729
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Гаджимурадов РустамДа какие препарированные запросы, он же написал "текстовый скрипт".
Ну вот в нём и проблема
...
Рейтинг: 0 / 0
Битовые значения
    #39637740
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochakrushВот я из и прикручиваю слитно.

В частности, чтобы их "прикручивать слитно" совершенно не нужны в таблице APPLIC два столбца SURN1 и SURN2 - зачем они там?

Оставьте только SUR_NAM. И записывайте в него уже посчитанное объединённое значение.

не могу. Компонент импорта тупо гонит все в таблицу. Пока еще не понял как перехватить "на лету" каждую запись и преобразовать как мне надо. Автор компонента подсказывал - на выходных попробую все-таки понять как.
...
Рейтинг: 0 / 0
Битовые значения
    #39637744
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Этот автор исходники компонента тебе дал?
...
Рейтинг: 0 / 0
Битовые значения
    #39637745
m7m
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush... Пока еще не понял как перехватить "на лету" каждую запись и преобразовать как мне надо. ....
Зачем на лету
Насколько я понял все загоняется в промежуточную таблицу
а потом будет раскидываться по другим
ну вот во время этого "раскидывания" и делай все что надо
(восстанавливай Фамилию, устанавливай даты ну и остальное что надо)
...
Рейтинг: 0 / 0
Битовые значения
    #39637800
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushне могу. Компонент импорта тупо гонит все в таблицу. Пока еще не понял как перехватить "на лету" каждую запись и преобразовать как мне надо. Автор компонента подсказывал - на выходных попробую все-таки понять как.


Может тебе сменить компонент? Например на тот же TClarionDataSet и им открывать таблицы Clarion`а как обычный набор данных?

Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
with TClarionDataSet.Create(Self) do
  try
    TableName := 'C:\Temp\Data.dat';

    Active := True;

    First;
    while not Eof do
      begin
        Caption := Concat(Fields[0].AsString, Fields[3].AsString);

        Application.ProcessMessages;

        Next;
      end;

    Active := False;

  finally
    Free;

  end;
...
Рейтинг: 0 / 0
Битовые значения
    #39637892
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

Помнится, у TClarionDataSet были какие-то проблемы как раз с массивами.
Это не так?
...
Рейтинг: 0 / 0
Битовые значения
    #39637904
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery, Поискал сейчас свежую версию. Последнее что было CDS_D2010.

"CLARION TOOLKIT AGE II" "No Clarion Arrays and Indexes" :(

тогда остается:

Код: powershell
1.
2.
for %%i in (C:\Temp\Dat\*.dat) do (
  ccvt.exe t=clarion i=%%i o=basic f=C:\Temp\Bas\%%~ni.bas)



на выхлопе будет

Код: powershell
1.
2.
3.
4.
5.
6.
7.
"ADR:U","ADR:D","ADR:KO","ADR:KV1","ADR:KV2","ADR:POST","ADR:P_UCH","ADR:UCH","ADR:DD","ADR:POR","ADR:R","ADR:MUN"
"2","7","","1","999","001","",1,20,16,"01","33 618 000"
"2","9","","1","999","001","",1,19,24,"01","33 618 000"
"2","10","","1","999","001","",1,19,28,"01","33 618 000"
"2","11","","1","999","001","",1,19,32,"01","33 618 000"
"4","1","","1","999","001","",1,10,4,"01","33 618 000"
...



уж такую дрянь прочитать и залить куда надо рубля не стоит. правда остается засада с запятыми внутри "текстовых полей", но это уже мелочи.

из минусов: долго и 16 бит. на 64-х битной ОС не запустить.
...
Рейтинг: 0 / 0
Битовые значения
    #39637912
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

До Clarion Toolkit 2 был ещё 1.
Он не является наследником TDataSet, что делает несколько нетривиальным его использование, зато он низкоуровневый, и смутно помнится, что вот он-то как раз и массивы мог читать.
...
Рейтинг: 0 / 0
Битовые значения
    #39637915
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WildSery,

У меня только 2 версии. От Кудрявцева и Захребеткова. Первую версию не видал.
...
Рейтинг: 0 / 0
Битовые значения
    #39637922
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPC,

У Кудрявцева была более ранняя, на основе которой он потом этот датасет и пытался запилить, но бросил, не доделав.
...
Рейтинг: 0 / 0
Битовые значения
    #39637929
WildSery
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот, например.
Clarion Toolkit v.1.14Description
Components set for Clarion v.2.x tables read-only access.
Features:

Encrypted tables support (with password recovering)
Clarion arrays support
Firebird (Interbase 6) support
Application-level transactions.
...
Рейтинг: 0 / 0
Битовые значения
    #39637978
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCWildSery, Поискал сейчас свежую версию. Последнее что было CDS_D2010.

"CLARION TOOLKIT AGE II" "No Clarion Arrays and Indexes" :(

тогда остается:

Код: powershell
1.
2.
for %%i in (C:\Temp\Dat\*.dat) do (
  ccvt.exe t=clarion i=%%i o=basic f=C:\Temp\Bas\%%~ni.bas)



на выхлопе будет

Код: powershell
1.
2.
3.
4.
5.
6.
7.
"ADR:U","ADR:D","ADR:KO","ADR:KV1","ADR:KV2","ADR:POST","ADR:P_UCH","ADR:UCH","ADR:DD","ADR:POR","ADR:R","ADR:MUN"
"2","7","","1","999","001","",1,20,16,"01","33 618 000"
"2","9","","1","999","001","",1,19,24,"01","33 618 000"
"2","10","","1","999","001","",1,19,28,"01","33 618 000"
"2","11","","1","999","001","",1,19,32,"01","33 618 000"
"4","1","","1","999","001","",1,10,4,"01","33 618 000"
...



уж такую дрянь прочитать и залить куда надо рубля не стоит. правда остается засада с запятыми внутри "текстовых полей", но это уже мелочи.

из минусов: долго и 16 бит. на 64-х битной ОС не запустить.

Ха, как бы не так. CCVT не видит массивов в принципе. Показывает только первый элемент. Эту утилиту я знаю уже 16 лет.
...
Рейтинг: 0 / 0
Битовые значения
    #39637983
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
Если бы утилита CCVT нормально все конвертировала - я бы не занимался промежуточной конвертацией, а сразу же из ДБФ разгонял туда куда мне надо
...
Рейтинг: 0 / 0
Битовые значения
    #39637985
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush, Это чо, родная утилита не выплевывает родные поля из родных таблиц? :)) Слава б-гу АРМ на кларионе умер 4 года назад :)
...
Рейтинг: 0 / 0
Битовые значения
    #39638027
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
LocksmithPCakrush, Это чо, родная утилита не выплевывает родные поля из родных таблиц? :)) Слава б-гу АРМ на кларионе умер 4 года назад :)

Увы, да.
Родная утилита не конвертирует поля массивы :'(
Пришлось подкопить денег на компонент который нормально видит поля массивы.
Афтар даже сказал что доработает импорт двумерного массива. Есть в одной таблице массив DIM(2,18)
...
Рейтинг: 0 / 0
Битовые значения
    #39638038
Фотография LocksmithPC
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Можешь на почту (LocksmithPC@mail.ru) кинуть небольшую табличку с такими полями, если там ПД нет, конечно?
...
Рейтинг: 0 / 0
Битовые значения
    #39638049
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrushне могу. Компонент импорта тупо гонит все в таблицу.

1) почему бы не использовать какую-нибудь внешнюю таблицу ? бинарный файл, например ?

2) даже если обязательно из компонента писать внутрь обычной таблицы Firebird - не нужно обновлять "по месту" и много раз подряд.

Сделай в FB две таблицы - одна для импорта, вторая для очищенных значений.
APPLIC1 и APPLIC2
А дальше как я писал выше. Ну пусть APPLIC1 будет не external table, а обычной таблицей, жаль, ну что сделаешь. Но сам метод точно такой же.

Идешь по "импортнутой" таблице строчка за строчкой в цикле и по одной строке окончательно подготовленнйо записываешь в "очищенную" таблицу.
Потом "импортнутую" таблицу чистишь или даже удаляешь.

Твой главный враг - многократные пробежки по огромной таблице.
Твоя главная задача - сделать пробежек так мало, как это возможно. 1, 2, 3...
Чем меньше - тем быстрее.
Тебе нужно написать PSQL блок (анонимный или stored procedure) который будет делать ВСЮ обработку каждой строчки сразу, не разбивая на шаги. Чтобы копировать в один проход, а не в 28 проходов.

Я просто не знаю, что тут ещё можно разжёвывать дальше.
...
Рейтинг: 0 / 0
Битовые значения
    #39638067
Фотография Симонов Денис
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochА дальше как я писал выше. Ну пусть APPLIC1 будет не external table, а обычной таблицей, жаль, ну что сделаешь. Но сам метод точно такой же.

Идешь по "импортнутой" таблице строчка за строчкой в цикле и по одной строке окончательно подготовленнйо записываешь в "очищенную" таблицу.
Потом "импортнутую" таблицу чистишь или даже удаляешь.


Можно GTT. Я именно так и делаю сложный импорт. В GTT идут сырые данные, а дальше курсор по GTT и их очистка и даже распихивание по нескольким таблицам.
...
Рейтинг: 0 / 0
Битовые значения
    #39638082
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Симонов Денис,

вряд ли. я думал, но мне не понравилось :-P

Я не знаю, насколько хорошо работает GTT с огроооомными объёмами данных.

А главное, он описывает свой SMImport как некий черный ящик, в работу которого он вмешаться не может. И заменить его не может. И тут возникает вопрос, можно ли заставить его SMImport и запуск скрипта-распихивателя потом проходить через одно и то же соединение? Или SMImport делаёт своё соединение, а скрипт - своё ?
...
Рейтинг: 0 / 0
Битовые значения
    #39638162
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AriochСимонов Денис,

вряд ли. я думал, но мне не понравилось :-P

Я не знаю, насколько хорошо работает GTT с огроооомными объёмами данных.

А главное, он описывает свой SMImport как некий черный ящик, в работу которого он вмешаться не может. И заменить его не может. И тут возникает вопрос, можно ли заставить его SMImport и запуск скрипта-распихивателя потом проходить через одно и то же соединение? Или SMImport делаёт своё соединение, а скрипт - своё ?

Как работает компонент:
1. Задаю имя исходной таблицы, имя таблицы-приемник, указываю Датасет.
2. Задаю соответствие столбцов
а потом, по сути только несколько строк:
Код: sql
1.
2.
3.
4.
5.
fbTImport.UpdateTransaction.StartTransaction;
fbTImport.Open;
SMIClar.Execute;
fbTImport.UpdateTransaction.Commit;
fbTImport.Close;


В теории компонент сам все комитит, но комит вызываю на всякий случай.
...
Рейтинг: 0 / 0
Битовые значения
    #39638208
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
Модераторам спасибо.
Сообщение писал быстро, забыл оформить в теги.
Сообщение можно удалить ;)
...
Рейтинг: 0 / 0
Битовые значения
    #39638211
Arioch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

вставка большого количества строк в SQL базы данных через TDataset.Insert / TDataSet.Post может быть весьма долгой (зависит от того, работает ли TDataSet честно "в лоб" или использует хитрости)

Что именно тормозит, скрипты после fbTImport.Close ? или процесс от StartTransaction до Close ?
...
Рейтинг: 0 / 0
Битовые значения
    #39638307
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arioch,
Мне кажется что сильно тормозят скрипты.
Засек время.
Всего импортируется 6млн строк.
Время 1ч30мин.
Получается в среднем - ок. 1111 записей в секунду.
Думаю что нормально.
Когда пойду дальше - переносить из временной БД в основную с обработкой, тогда посмотрим.
...
Рейтинг: 0 / 0
Битовые значения
    #39638309
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,
Немного не точно написал: импортируется и обрабатывается скриптами.
...
Рейтинг: 0 / 0
Битовые значения
    #39638315
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Ты не ответил, - исходники используемого компонента импорта у тебя есть?
...
Рейтинг: 0 / 0
Битовые значения
    #39638346
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad Fakrush,

Ты не ответил, - исходники используемого компонента импорта у тебя есть?
есть
...
Рейтинг: 0 / 0
Битовые значения
    #39638349
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Вот. А теперь представь картину, что опытной рукой его, скорее всего, не более чем пятью строками можно поправить с тем, чтобы он для пустых строк сразу вставлял пустые строки, а даты сразу же вставлял с необходимым смещением. И что тогда останется от того твоего скрипта постобработки и обмусоливаемое "проблемы" в целом? Представил?
...
Рейтинг: 0 / 0
Битовые значения
    #39638350
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad Fakrush,

Вот. А теперь представь картину, что опытной рукой его, скорее всего, не более чем пятью строками можно поправить с тем, чтобы он для пустых строк сразу вставлял пустые строки, а даты сразу же вставлял с необходимым смещением. И что тогда останется от того твоего скрипта постобработки и обмусоливаемое "проблемы" в целом? Представил?

Представил.
Допустим со строками можно попробовать.
А вот с датами проблема.
Даты хранятся в типе LONG
и как при импорте определить это число или дата?
...
Рейтинг: 0 / 0
Битовые значения
    #39638390
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Не имея перед глазами исходников трудно говорить более предметно, но если ты расшифруешь как именно в нем "задается соответствие столбов", то могу и пофантазировать, так сказать, на кончике пера. Однако, прошу заметить, что уже за счет одного лишь сокращения последующего апдейтов строк твой послескрипт уже полегчает как бы не не треть (или больше?).
...
Рейтинг: 0 / 0
Битовые значения
    #39640442
akrush
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F,

Всем спасибо за подсказки.
Спросил у автора. Оказывается можно сразу на нужное поле поставить обработку перед вставкой. Так что лишние обработки скриптами ушли в прошлое.
...
Рейтинг: 0 / 0
Битовые значения
    #39640477
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
akrush,

Ну вот, а как дышал, как дышал! (c) ))
...
Рейтинг: 0 / 0
127 сообщений из 127, показаны все 6 страниц
Форумы / Firebird, InterBase [игнор отключен] [закрыт для гостей] / Битовые значения
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]