ARRAY
ARRAY, как расширенный тип базы данных, поддерживается в различных системах баз данных, таких как PostgreSQL, ClickHouse и Snowflake. ARRAY широко используется в сценариях, таких как A/B тесты, анализ пользовательских тег ов и профилирование пользователей. Selena поддерживает многомерное вложение массивов, нарезку массивов, сравнение и фильтрацию.
Определение столбцов ARRAY
Вы можете определить столбец ARRAY при создании таблицы.
-- Определить одномерный массив.
ARRAY<type>
-- Определить вложенный массив.
ARRAY<ARRAY<type>>
-- Определить столбец массива как NOT NULL.
ARRAY<type> NOT NULL
type указывает типы данных элементов в массиве. Selena поддерживает следующие типы элементов: BOOLEAN, TINYINT, SMALLINT, INT, BIGINT, LARGEINT, FLOAT, DOUBLE, VARCHAR, CHAR, DATETIME, DATE, JSON, ARRAY (с версии v1.5.2), MAP (с версии v1.5.2) и STRUCT (с версии v1.5.2).
Элементы в массиве по умолчанию могут быть null, например, [null, 1 ,2]. Вы не можете указать элементы в массиве как NOT NULL. Однако вы можете указать столбец ARRAY как NOT NULL при создании таблицы, как в третьем пример е в следующем фрагменте кода.
Примеры:
-- Определить c1 как одномерный массив, тип элементов которого INT.
create table t0(
c0 INT,
c1 ARRAY<INT>
)
duplicate key(c0)
distributed by hash(c0);
-- Определить c1 как вложенный массив, тип элементов которого VARCHAR.
create table t1(
c0 INT,
c1 ARRAY<ARRAY<VARCHAR(10)>>
)
duplicate key(c0)
distributed by hash(c0);
-- Определить c1 как столбец массива NOT NULL.
create table t2(
c0 INT,
c1 ARRAY<INT> NOT NULL
)
duplicate key(c0)
distributed by hash(c0);
Ограничения
Следующие ограничения применяются при создании столбцов ARRAY в таблицах Selena:
- В версиях ранее v1.5.2 вы можете создавать столбцы ARRAY только в таблицах Duplicate Key. Начиная с v1.5.2, вы также можете создавать столбцы ARRAY в других типах таблиц (Primary Key, Unique Key, Aggregate). Обратите внимание, что в таблице Aggregate вы можете создать столбец ARRAY только когда функция, используемая для агрегации данных в этом столбце, является replace() или replace_if_not_null(). Для получения дополнительной информации см. Aggregate table.
- Столбцы ARRAY нельзя использовать как ключевые столбцы.
- Столбцы ARRAY нельзя использовать как ключи разделов (включенные в PARTITION BY) или ключи группировки (включенные в DISTRIBUTED BY).
- DECIMAL V3 не поддерживается в ARRAY.
- Массив может иметь максимум 14 уровней вложенности.
Создание массивов в SQL
Массивы можно создавать в SQL, используя квадратные скобки [], при этом каждый элемент массива разделяется запятой (,).
mysql> select [1, 2, 3] as numbers;
+---------+
| numbers |
+---------+
| [1,2,3] |
+---------+
mysql> select ["apple", "orange", "pear"] as fruit;
+---------------------------+
| fruit |
+---------------------------+
| ["apple","orange","pear"] |
+---------------------------+
mysql> select [true, false] as booleans;
+----------+
| booleans |
+----------+
| [1,0] |
+----------+
Selena автоматически выводит типы данных, если массив состоит из элементов нескольких типов:
mysql> select [1, 1.2] as floats;
+---------+
| floats |
+---------+
| [1.0,1.2] |
+---------+
mysql> select [12, "100"];
+--------------+
| [12,'100'] |
+--------------+
| ["12","100"] |
+--------------+
Вы можете использовать угловые скобки (<>) для отображения объявленного типа массива.
mysql> select ARRAY<float>[1, 2];
+-----------------------+
| ARRAY<float>[1.0,2.0] |
+-----------------------+
| [1,2] |
+-----------------------+
mysql> select ARRAY<INT>["12", "100"];
+------------------------+
| ARRAY<int(11)>[12,100] |
+------------------------+
| [12,100] |
+------------------------+
NULL могут быть включены в элемент.
mysql> select [1, NULL];
+----------+
| [1,NULL] |
+----------+
| [1,null] |
+----------+
Для пустого массива вы можете использовать угловые скобки для отображения объявленного типа, или вы можете написать [] напрямую, чтобы Selena вывела тип на основе контекста. Если Selena не может вывести тип, она сообщит об ошибке.
mysql> select [];
+------+
| [] |
+------+
| [] |
+------+
mysql> select ARRAY<VARCHAR(10)>[];
+----------------------------------+
| ARRAY<unknown type: NULL_TYPE>[] |
+----------------------------------+
| [] |
+----------------------------------+
mysql> select array_append([], 10);
+----------------------+
| array_append([], 10) |
+----------------------+
| [10] |
+----------------------+
Загрузка данных Array
Selena поддерживает загрузку данных Array тремя способами:
- INSERT INTO подходит для загрузки небольших объемов данных для тестирования.
- Broker Load подходит для загрузки файлов ORC или Parquet с большими объемами данных.
- Stream Load и Routine Load подходят для загрузки CSV файлов с большими объемами данных.