1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/dolphindb-release

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
compatibility_changes_CN.md 24 КБ
Копировать Редактировать Web IDE Исходные данные Просмотреть построчно История
gitlife-traslator Отправлено 30.11.2024 03:18 0a04dde

Совместимость с предыдущими версиями

В этом файле представлен обзор возможных новых функций и изменений (включая обновления, соответствующие отраслевым стандартам) в версиях 1.30.22/2.00.10, которые могут повлиять на существующие скрипты и конфигурации.

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

  • Совместимость с предыдущими версиями
    • Версия 2.00.10.8

      • Исправления ошибок, влияющие на систему: — Если в запросе к памяти таблицы не используется group by, но используются вложенные агрегатные функции, предыдущие версии выдавали ошибку, а текущая версия поддерживает эту функцию. — В streamEngineParser при использовании недопустимого индекса в параметре metrics предыдущие версии не выдавали ошибку, тогда как текущая версия выдаёт ошибку «out of index».
    • Версия 2.00.10.5

      • Исправление ошибки, влияющей на систему: — При применении функций заполнения класса (ffill и т. д.) к массиву векторов, если массив векторов не содержит пустых значений, предыдущая версия выдавала ошибку; текущая версия больше не выдаёт ошибку.
    • Версия 2.00.10.4

      • Изменения для соответствия отраслевой практике или стандартам SQL: — Функции div и mod поддерживают отрицательные числа в качестве делителя: в предыдущих версиях, когда делитель был отрицательным числом, они возвращали пустое значение; в текущей версии они возвращают правильный результат, соответствующий поведению операторов / и % в Python. — Модификация функций join, join!, append! для объединения двух кортежей, чтобы они соответствовали поведению предыдущих версий до 2.00.10.1.

      • Исправления ошибок, влияющих на систему: — Функция fill при применении к результату pivot by не может указывать параметр limit, усилена проверка: при применении вложенной функции fill к результату pivot by и указании параметра limit предыдущие версии возвращали неправильный результат; текущая версия выдаст ошибку. — Усиленная проверка функции cumlastNot при её применении к массиву векторов: предыдущие версии могли возвращать неправильный результат; текущая версия вызовет ошибку.

    • Версия 2.00.10.2

      • Изменения для соответствия отраслевой практике или стандартам SQL: — Удаление функции getClusterReplicationMetrics, её функциональность унаследована от функции getSlaveReplicationQueueStatus. — Использование функции toStdJson: — Преобразование логических значений: вместо возврата 1 и 0 теперь возвращаются значения true или false. — Преобразование пустых значений: кроме типа STRING, все остальные типы пустых значений будут преобразованы в null.

      • Исправления ошибок, влияющих на систему: — Поведение функции license по умолчанию изменено с возврата информации о лицензии из файла .lic в памяти на возврат информации о лицензии в памяти.

    • Версия 2.00.10.1

      • Изменения для соответствия отраслевой практике или стандартам SQL: — Изменено поведение функций join, join! и append! при объединении двух кортежей.

      • Исправления ошибок, влияющих на систему: — Когда параметр triggeringPartern функции streamEngineParser установлен в 'keyCount', значение по умолчанию параметра keepOrder изменено с false на true, и его нельзя установить в false. Новая версия выдаст ошибку при установке triggeringPattern='keyCount' и keepOrder=false. — Не поддерживается установка параметра consistent функции accumulate в значение false, если параметр metrics функции createReactiveStateEngine указывает на эту функцию.

    • Версия 2.00.10

      • Изменения для соответствия отраслевой практике или стандартам SQL: — Добавлены сообщения об ошибках при совместном использовании одной таблицы несколько раз с помощью оператора share или функций share и enableTableShareAndPersistence. — Тип данных DECIMAL64 после применения функции sum становится DECIMAL128. — Увеличена проверка при записи данных в поток: после добавления столбца в таблицу и записи данных, соответствующих новой схеме, запись данных, соответствующих старой схеме, больше невозможна. DolphinDB: изменения в новой версии

В тексте запроса содержатся фрагменты на языке DolphinDB. В новой версии этого языка произошли некоторые изменения, которые могут повлиять на работу с базами данных. Вот перевод текста на русский язык:

  1. Поведение при преобразовании типов SYMBOL и STRING в DECIMAL изменилось: старая версия обрезает значение после позиции scale, новая версия округляет значение до scale и затем обрезает.

Пример:

symbol(["1.34", "4.5677"])$DECIMAL32(2)
// Старая версия: [1.34, 4.56]
// Новая версия: [1.34, 4.57]
  1. Для параметров пользовательских функций добавлена проверка. В новой версии параметры по умолчанию должны быть скалярами или обычными массивами, не допускаются словари, определения функций и кортежи.

  2. Изменён результат функции avg для строкового типа ввода. В старой версии функция выдавала исключение, в новой — возвращает NULL.

  3. Оператор JOIN в DolphinDB соответствует стандарту SQL:

  • Если не указано условие ON, выполняется CROSS JOIN, который возвращает декартово произведение двух таблиц.
  • При указании условия ON выполняется INNER JOIN, возвращающий строки из объединённой таблицы, удовлетворяющие условию.

Новая версия рассматривает «join» как ключевое слово для объединения таблиц, а не как функцию соединения.

select * from a join b
// Старая версия эквивалентна select * from join(a, b)
// Новая версия эквивалентна select * from cj(a, b)
  1. Не поддерживается соединение столбцов BLOB-типа. Появилось сообщение об ошибке: «Key must be integer, date/time, or string».

  2. Изменено поведение пустых значений в LEFT JOIN, LEFT SEMI JOIN, RIGHT JOIN, EQUI JOIN и FULL JOIN. В старой версии пустые значения считались совпадающими, в новой версии — несовпадающими.

  3. Изменена обработка RIGHT JOIN для соответствия стандарту SQL.

  • В старой версии сначала отображаются столбцы правой таблицы, затем левой.
  • В новой версии сначала отображаются столбцы левой таблицы, затем правой.
  1. При соединении двух таблиц справа, если столбец существует в обеих таблицах и не указан квалификатор, обработка происходит для первого столбца, содержащего этот столбец. Это соответствует стандарту SQL.

  2. Когда в SQL-запросе используется предикат in, и за ним следует временной тип, то вместо проверки равенства элементов условия и данного элемента, элемент рассматривается как вектор, и проверяется наличие элементов условия в этом векторе.

  3. В запросах с несколькими таблицами, где используется внутреннее соединение, нельзя использовать агрегатные функции в предложении where.

Влияние на систему после исправления ошибок

  1. Необходимо обновить файл dolphindb.dos для запуска узла.

  2. Параметр schema функции loadTextEx стал более строгим. Новая версия требует, чтобы указанная таблица была непустой, а столбцы name и type имели тип STRING.

  3. Функция take не поддерживает ввод пар.

  4. Изменилось поведение NULL-значений в функциях mTopN и movingTopNIndex. В старой версии NULL-значения рассматривались как минимальные значения для сортировки, в новой версии они не участвуют в сортировке.

  5. Результат cast("", BOOL) изменился. Старая версия возвращает false, новая — NULL.

  6. Параметр T функции genericTStateIterate стал проверяться. Старая версия не требовала строгого увеличения T, новая требует.

  7. Функции kama и t3 обрабатывают NULL-значения аналогично Python. Новая версия пропускает начальные последовательные NULL-значения и обрабатывает оставшиеся как 0.

  8. Обновление таблицы с использованием левого измерения и правой распределённой таблицы вызывает ошибку. Старая версия может выполнить обновление, но данные не обновляются. Новая версия вызывает ошибку.

  9. В старых версиях SQL-операторов можно было использовать функцию distinct с другими агрегатными функциями для распределённых таблиц. Теперь это запрещено.

  10. При использовании функций select или exec с двумя параметрами в некоторых случаях возникает ошибка синтаксического анализа (запятая интерпретируется как cross join). Чтобы избежать ошибки, необходимо использовать скобки вокруг select или exec. ### Текст технической направленности из области разработки и тестирования программного обеспечения

Версия DolphinDB может выполнять следующие операции:

  • Выполнение share для старой версии.
  • При повторном выполнении share для новой версии будет выведено сообщение об ошибке «This stream has already been shared as 't1'».
  • Помимо share, в share функции и enableTableShareAndPersistence добавлены проверки.
若需要重新共享该表,可先取消当前的共享。

- 流数据表写入数据时增加校验:在对流表新增列后,如果写入了符合新 schema 的数据后,不能再写入符合旧 schema 的数据。
  • 
    

t = streamTable(1:0, idval, [INT, INT]) enableTableShareAndPersistence(t, st) go data1 = table(1..10 as id, 11..20 as val) t.append!(data1) addColumn(st, price, DOUBLE) t.append!(data1) data2 = table(1..10 as id, 11..20 as val, 21..30 as price) t.append!(data2) t.append!(data1) //新版本报错The number of columns of the table to insert must be the same as that of the original table. //旧版本允许执行


* Для пользовательских функций проверка параметров по умолчанию. В новой версии параметры по умолчанию могут быть только скалярами или обычными массивами, не допускаются словари, определения функций и кортежи.

* Изменение результата avg функции после ввода строки. В новой версии avg функция возвращает NULL после ввода строки, а в старой версии генерирует исключение.

* DolphinDB JOIN оператор соответствует стандартному SQL:
    * Когда условие ON соединения не указано, выполняется CROSS JOIN соединение, и результатом является декартово произведение двух таблиц.
    * Если указано условие ON соединения, выполняется INNER JOIN соединение, и результат представляет собой строки таблицы соединения, удовлетворяющие условию ограничения.
В новой версии ключевое слово join в SQL рассматривается как ключевое слово соединения таблицы, а не как функция соединения.

select * from a join b //旧版本相当于select * from join(a, b) //新版本相当于 select * from cj(a, b)


* Соответствие поведения пустых строк в LEFT JOIN, LEFT SEMI JOIN, RIGHT JOIN, EQUI JOIN и FULL JOIN соответствует стандарту SQL.

* В SQL-запросах с использованием предиката in, если in следует за скаляром, вместо сравнения элемента условия с этим скаляром проверяется, находится ли этот скаляр в векторе.

vec = [2012.01.01T00:00:00, 2012.01.01T23:59:59, 2012.01.10T00:00:00, 2012.01.10T23:59:59, 2012.01.31T00:00:00, 2012.01.31T23:59:59, 2012.02.01T00:00:00, 2012.02.01T23:59:59, 2012.02.15T00:00:00, 2012.02.15T23:59:59, 2012.02.29T00:00:00, 2012.02.29T23:59:59] t = table(1..size(vec) as uid, vec as pcol) select * from t where pcol in 2012.01.01 //老版本相当于select * from t where pcol == 2012.01.01,查出1条数据 //新版本相当于select * from t where pcol in [2012.01.01],查出0条数据


### Влияние на систему исправленных ошибок

* Необходимо обновить dolphindb.dos при обновлении, иначе узел не запустится.

* Параметр *schema* функции loadTextEx имеет более строгие проверки. Новая версия требует, чтобы указанная таблица была непустой таблицей, а столбцы «name» и «type» имели тип STRING.

* Функция take не поддерживает ввод пар.

take(pair(1, 3), 10) //旧版本结果[1,3,1,3,1,3,1,3,1,3] //新版本报错Usage: take(X, n). X must be a scalar or a non-empty vector.


* Изменена обработка NULL значений в параметрах S функций mTopN и movingTopNIndex. В старой версии NULL значения рассматриваются как минимальные значения для сортировки, а новые версии не участвуют в сортировке, соответствующие значения X не учитываются при расчёте.

X = [2, 1, 5, 3, 4, 3, 1, 9, 0, 5, 2, 3] S = [5, 8, 1, 9, 7, 3, 1, NULL, 0, 8, 7, 7] msumTopN(X, S, window=6, top=3)

//老版本结果 [2, 3, 8, 8, 11, 10, 9, 15, 10, 10, 10, 10] //新版本结果 [2, 3, 8, 8, 11, 10, 9, 9, 4, 4, 4, 3]


* Результат cast («», BOOL) изменился. Старая версия возвращает false, новая версия возвращает NULL.

* Параметры T функции genericTStateIterate имеют проверки. Старая версия не требует строгого увеличения T, но новая версия требует строгого увеличения.

* Обработка NULL значений функциями kama и t3 согласуется с Python. Новые версии пропускают начальные последовательные NULL значения и рассматривают оставшиеся NULL значения как 0 для вычислений.

* Поведение обновления таблицы соединений, где левая таблица является таблицей измерений, а правая таблица — распределённой таблицей, изменено на выброс исключения. Старые версии могут выполнять операторы обновления, но данные не обновляются. Новые версии будут генерировать исключения.

* Старая версия SQL-оператора может использовать функцию distinct для распределённых таблиц вместе с другими агрегатными функциями. Но новая версия запрещает это использование.

* Когда оператор select или exec применяется к функции с двумя или более параметрами, возникает синтаксическая ошибка анализа (рассматривается как cross join) в некоторых случаях. В этом случае необходимо использовать скобки для заключения оператора select или exec, чтобы избежать ошибки.

mr(sqlDS(<select * from pt>),x->select top 1 * from x,,unionAll{,false}) //上条语句加括号包裹后可正常解析 mr(sqlDS(<select * from pt>),(x->select top 1 * from x),,unionAll{,false})

n=1000 t1=table(rand(100, n) as id, rand(100, n) as val) t2=table(rand(100, n) as id, rand(100, n) as val) re3=select * from t1 where val in select val from t2, val gt select first(val) from t2 where id = 1 //上条语句加括号包裹后可正常解析 re3=select * from t1 where val in (select val from t2), val gt (select first(val) from t2 where id = 1)


* Как и в стандартном SQL, изменение имён столбцов, определённых в предложении select, нельзя использовать в предложении where.

id = [1, 1, 2, 6, 8, 3, 2, 5, 3, 8] v1 = take(1..5, 10) t = table(id as id, v1 as v1) re1 = select id as i from t where i > 1

//旧版本(1.30.21/2.00.10)可以执行 //新版本会报错Unrecognized column name i


* Изменить поведение вставки записей с помощью функции upsert! при совпадении пустых значений. В старых версиях пустые значения совпадают с пустыми значениями, потому что они не обновляют записи. В новых версиях пустые значения не совпадают с пустыми значениями и увеличивают новые записи. take(int(),n)  
    t1[`sym] = "A"+string(1..n)  
    login("admin", "123456")  
    dbPath = "dfs://upsert_test"  
    if(existsDatabase(dbPath))  
        dropDatabase(dbPath)  
        db = database(dbPath, VALUE, 2020.05.01..2020.05.10)  
        pt = db.createPartitionedTable(t1, `pt`, `date).append!(t1)  

    login("admin", "123456")  
    pt = loadTable("dfs://upsert_test", "pt")  
    newdata=table(take(2020.05.01..2020.05.05,5) as date,take(int(),5) as id,"B"+string(1..5) as sym)  
    pt.upsert!(newdata,true,`id)  
    select * from pt  
    // Старая версия возвращает 5 записей  
    // Новая версия возвращает 10 записей
  • Функция upsert! добавляет проверку количества столбцов. В старой версии количество столбцов в newData может быть меньше, чем в исходной таблице. В новой версии количество столбцов newData должно совпадать с количеством столбцов исходной таблицы.
  • В новой версии при использовании предиката in для столбца секционированной таблицы в условии where возникает ошибка.
  • wj и pwj не поддерживают правую таблицу как распределённую таблицу.

Плагин

  • Плагин httpClient удаляет интерфейсы httpCreateSubJob, httpCreateMultiParserSubJob, httpCancelSubJob и httpGetJobStat.

Опубликовать ( 0 )

Вы можете оставить комментарий после Вход в систему

1
https://api.gitlife.ru/oschina-mirror/dolphindb-release.git
git@api.gitlife.ru:oschina-mirror/dolphindb-release.git
oschina-mirror
dolphindb-release
dolphindb-release
master