Совместимость с предыдущими версиями
В этом файле представлен обзор возможных новых функций и изменений (включая обновления, соответствующие отраслевым стандартам) в версиях 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
share
или функций share
и enableTableShareAndPersistence
.
— Тип данных DECIMAL64 после применения функции sum
становится DECIMAL128.
— Увеличена проверка при записи данных в поток: после добавления столбца в таблицу и записи данных, соответствующих новой схеме, запись данных, соответствующих старой схеме, больше невозможна. DolphinDB: изменения в новой версии
В тексте запроса содержатся фрагменты на языке DolphinDB. В новой версии этого языка произошли некоторые изменения, которые могут повлиять на работу с базами данных. Вот перевод текста на русский язык:
Пример:
symbol(["1.34", "4.5677"])$DECIMAL32(2)
// Старая версия: [1.34, 4.56]
// Новая версия: [1.34, 4.57]
Для параметров пользовательских функций добавлена проверка. В новой версии параметры по умолчанию должны быть скалярами или обычными массивами, не допускаются словари, определения функций и кортежи.
Изменён результат функции avg для строкового типа ввода. В старой версии функция выдавала исключение, в новой — возвращает NULL.
Оператор JOIN в DolphinDB соответствует стандарту SQL:
Новая версия рассматривает «join» как ключевое слово для объединения таблиц, а не как функцию соединения.
select * from a join b
// Старая версия эквивалентна select * from join(a, b)
// Новая версия эквивалентна select * from cj(a, b)
Не поддерживается соединение столбцов BLOB-типа. Появилось сообщение об ошибке: «Key must be integer, date/time, or string».
Изменено поведение пустых значений в LEFT JOIN, LEFT SEMI JOIN, RIGHT JOIN, EQUI JOIN и FULL JOIN. В старой версии пустые значения считались совпадающими, в новой версии — несовпадающими.
Изменена обработка RIGHT JOIN для соответствия стандарту SQL.
При соединении двух таблиц справа, если столбец существует в обеих таблицах и не указан квалификатор, обработка происходит для первого столбца, содержащего этот столбец. Это соответствует стандарту SQL.
Когда в SQL-запросе используется предикат in, и за ним следует временной тип, то вместо проверки равенства элементов условия и данного элемента, элемент рассматривается как вектор, и проверяется наличие элементов условия в этом векторе.
В запросах с несколькими таблицами, где используется внутреннее соединение, нельзя использовать агрегатные функции в предложении where.
Необходимо обновить файл dolphindb.dos для запуска узла.
Параметр schema функции loadTextEx стал более строгим. Новая версия требует, чтобы указанная таблица была непустой, а столбцы name и type имели тип STRING.
Функция take не поддерживает ввод пар.
Изменилось поведение NULL-значений в функциях mTopN и movingTopNIndex. В старой версии NULL-значения рассматривались как минимальные значения для сортировки, в новой версии они не участвуют в сортировке.
Результат cast("", BOOL) изменился. Старая версия возвращает false, новая — NULL.
Параметр T функции genericTStateIterate стал проверяться. Старая версия не требовала строгого увеличения T, новая требует.
Функции kama и t3 обрабатывают NULL-значения аналогично Python. Новая версия пропускает начальные последовательные NULL-значения и обрабатывает оставшиеся как 0.
Обновление таблицы с использованием левого измерения и правой распределённой таблицы вызывает ошибку. Старая версия может выполнить обновление, но данные не обновляются. Новая версия вызывает ошибку.
В старых версиях SQL-операторов можно было использовать функцию distinct с другими агрегатными функциями для распределённых таблиц. Теперь это запрещено.
При использовании функций select или exec с двумя параметрами в некоторых случаях возникает ошибка синтаксического анализа (запятая интерпретируется как cross join). Чтобы избежать ошибки, необходимо использовать скобки вокруг select или exec. ### Текст технической направленности из области разработки и тестирования программного обеспечения
Версия DolphinDB может выполнять следующие операции:
若需要重新共享该表,可先取消当前的共享。
- 流数据表写入数据时增加校验:在对流表新增列后,如果写入了符合新 schema 的数据后,不能再写入符合旧 schema 的数据。
t = streamTable(1:0, id
val, [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 записей
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )