============================================================================================
Примечание: Этот файл содержит изменения совместимости для DolphinDB Server версии 1.30.22/2.00.10 и более ранних версий. Начиная с версии 1.30.23/2.00.11, этот файл больше не поддерживается. Для получения информации о выпуске и документации по последнему серверу DolphinDB, пожалуйста, обратитесь к новой документации DolphinDB.
============================================================================================
Этот файл предоставляет обзор новых функций и изменений (включая обновления для соответствия отраслевым стандартам) в версии 1.30.22/2.00.10, которые могут повлиять на ваши существующие скрипты и конфигурации.
Пожалуйста, внимательно изучите файл, чтобы понять, как ваша текущая настройка может быть затронута обновлением до этой версии.
Для таблицы, возвращаемой pivot by, теперь сообщается об ошибке, когда ffill, bfill или lfill с указанным параметром limit используется в качестве вложенной функции в операторе select. В предыдущих версиях возвращались неверные результаты.
Изменённая функция cumlastNot: теперь сообщается об ошибке, если входной аргумент является вектором массива. В предыдущих версиях возвращались неверные результаты.
Удалена функция getClusterReplicationMetrics. Добавлена функция getSlaveReplicationQueueStatus как наследование getClusterReplicationMetrics.
При вызове функции toStdJson:
select distinct date from temp_t where date in select temporalAdd(date, 2M) from temp_t
- The right table of `wj`/`pwj` cannot be a DFS table.
### Plguins
- Removed methods `httpCreateSubJob`, `httpCreateMultiParserSubJob`, `httpCancelSubJob` and `httpGetJobStat` from the httpClient plugin.
---
## Version 1.30.22.4
### Changes Made to Match Industry Practices or SQL Standards
- Поведение функций join, join! и append! при объединении двух кортежей было возвращено к тому, как они работали в версиях ранее 2.00.10.1.
## Version 1.30.22.2
### Changes Made to Match Industry Practices or SQL Standards
- Убрана функция getClusterReplicationMetrics. Добавлена функция getSlaveReplicationQueueStatus как наследование getClusterReplicationMetrics.
- При вызове функции toStdJson:
- Для логических значений предыдущие версии возвращали 1 и 0, теперь возвращаются true и false.
- Для NULL-значений предыдущие версии преобразовывали только целочисленные, плавающие и логические значения NULL в JSON null, другие типы преобразовывались в «». Теперь значения NULL всех типов, кроме STRING, преобразуются в null.
### System Impacts Caused by Bug Fixes
- Функция license теперь возвращает информацию о лицензии в памяти по умолчанию вместо информации из файла .lic, как в предыдущих версиях.
## Version 1.30.22.1
### Changes Made to Match Industry Practices or SQL Standards
- Изменено поведение функций join, join! и append! при объединении двух кортежей.
```
a = [[1,2],[3,4]]
b = [[5,6],[7,8]]
a.join(b)
//Output (предыдущие версии): ([1,2],[3,4],([5,6],[7,8]))
//Output (начиная с этой версии): ([1,2],[3,4],[5,6],[7,8])
a.join!(b)
a
//Output (предыдущие версии):([1,2],[3,4],([5,6],[7,8]))
//Output (начиная с этой версии): ([1,2],[3,4],[5,6],[7,8])
a.append!(b)
a
//Output (предыдущие версии):([1,2],[3,4],([5,6],[7,8]))
//Output (начиная с этой версии): ([1,2],[3,4],[5,6],[7,8])
Когда параметр triggeringPattern функции streamEngineParser установлен в 'keyCount', параметр keepOrder теперь должен быть установлен в true. Установка triggeringPattern = 'keyCount' с keepOrder = false вызывает ошибку.
При использовании функции более высокого порядка accumulate в параметре metrics функции createReactiveStateEngine, параметр consistent функции accumulate больше не может быть установлен в false.
Повторное использование одной и той же потоковой таблицы несколько раз с помощью функции share или enableTableShareAndPersistence теперь приводит к ошибке.
n=10000;
t=streamTable(2020.01.01T00:00:00 + 0..(n-1) as timestamp, rand(`IBM`MS`APPL`AMZN,n) as symbol, rand(10.0, n) as value)
share t as t1
share t as t2
//В предыдущих версиях скрипт выше мог быть успешно выполнен.
//Начиная с этой версии вторая операция share вызовет ошибку: Эта таблица потока уже была разделена как 't1'.
//Это изменение применяется не только к оператору "share", но также к функциям share() и enableTableShareAndPersistence().
Чтобы повторно разделить таблицу потока, её необходимо сначала отменить.
Проверка добавления данных в таблицы потоков была улучшена.
Ранее можно было добавить данные со старой схемой (меньше столбцов) в таблицу потоков после того, как схема была изменена для добавления новых столбцов. Теперь это запрещено.
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)
//С этой версии скрипт выше вызовет ошибку: Количество столбцов таблицы для вставки должно совпадать с количеством столбцов исходной таблицы.
//В предыдущей версии скрипт выполнялся без ошибок.
- Функция `distinct` не может быть вложена с другой агрегатной функцией в SQL-запрос, применяемый к таблице DFS.
- При передаче оператора SELECT или EXEC функции с как минимум двумя аргументами будет выдана ошибка синтаксического анализа, поскольку запятая (,) может быть интерпретирована как CROSS JOIN. Необходимо добавить пару скобок для разделения оператора от других параметров.
```
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)
```
- Определённые псевдонимы столбцов в предложении SELECT больше нельзя использовать в предложении WHERE. Это поведение соответствует стандартной семантике SQL.
```
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.9 приведённый выше SQL-оператор можно успешно выполнить.
// Начиная с этой версии, будет выдано сообщение об ошибке: Нераспознанное имя столбца i
```
- Теперь, когда значение NULL нельзя сопоставить другому значению NULL, при вставке записей с помощью функции `upsert!`, если исходный столбец таблицы и столбец вставляемой таблицы содержат значения NULL, возвращается новая запись.
```
n=5
t1 = table(n:n,`date`id`sym,[DATE,INT,STRING])
t1[`date] = take((2020.05.01..2020.05.05),n)
t1[`id] = 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
// Предыдущие версии возвращали пять записей.
// С этой версии возвращаются десять записей.
```
- Добавлена проверка для `upsert!`: количество столбцов newData должно соответствовать количеству столбцов исходной таблицы. В предыдущих версиях можно было вставить таблицу с меньшим количеством столбцов.
- Будет выдана ошибка при фильтрации данных с условием where в столбцах секционированной таблицы.
```
login("admin","123456")
if(existsDatabase("dfs://test_in")){
dropDatabase("dfs://test_in")
}
db=database("dfs://test_in", VALUE, 2015.01M..2016.01M)
t=table(take(2015.01M..2016.01M,10000) as date, 1..10000 as id, rand(100,10000) as v)
db.createPartitionedTable(t,`pt,`date).append!(t)
temp_t = db.loadTable(`pt)
select distinct date from temp_t where date in temporalAdd(date, 2M)
// Выдаётся сообщение об ошибке: Нельзя использовать предикат 'in' с столбцами секционированных таблиц в условии where, пожалуйста, используйте подзапрос для этого.
// SQL-оператор с подзапросом после «in» можно выполнить правильно
select distinct date from temp_t where date in select temporalAdd(date, 2M) from temp_t
```
- Правая таблица `wj`/`pwj` не может быть таблицей DFS.
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )