Работа с таблицами Iceberg в Impala
Apache Iceberg — это открытый высокопроизводительный формат для больших аналитических таблиц. Сервис ADH Impala поддерживает данный формат, позволяя работать с таблицами Iceberg с помощью SQL и выполнять аналитические операции.
Каталоги Iceberg
В архитектуре Iceberg каталог (catalog) — это именованное хранилище таблиц и их метаданных. Для работы с Iceberg-таблицами в Impala доступны следующие типы каталогов:
-
HiveCatalog. Является дефолтным каталогом в Impala. Использует Hive Metastore для хранения метаданных таблиц. Данный каталог используется во всех примерах, приведенных в статье.
-
HadoopCatalog. Каталог с указанием пути, предполагающий наличие в HDFS директории, где хранятся отдельные таблицы Iceberg.
-
HadoopTables. Каталог, предполагающий наличие HDFS-директории, где хранятся данные нескольких таблиц Iceberg.
Также можно использовать кастомные каталоги для существующих таблиц.
Однако автоматическое обновление метаданных не работает для таблиц в кастомном каталоге.
Необходимо вручную вызывать REFRESH для таких таблиц, когда они изменяются вне Impala.
Команды DDL
Создание таблицы
Чтобы создать таблицу Iceberg, добавьте предложение STORED AS ICEBERG к стандартному оператору Impala CREATE TABLE.
Пример:
CREATE TABLE default.impala_ice_test (
txn_id int,
acc_id int,
txn_value double,
txn_date date)
STORED AS ICEBERG;
Выполните команду DESCRIBE FORMATTED для получения информации о только что созданной таблице:
DESCRIBE FORMATTED default.impala_ice_test;
Query: describe formatted impala_ice_test
+------------------------------+----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name | type | comment |
+------------------------------+----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| # col_name | data_type | comment |
| | NULL | NULL |
| txn_id | int | NULL |
| acc_id | int | NULL |
| txn_value | double | NULL |
| txn_date | date | NULL |
| | NULL | NULL |
| # Detailed Table Information | NULL | NULL |
| Database: | default | NULL |
| OwnerType: | USER | NULL |
| Owner: | admin | NULL |
| CreateTime: | Thu Jul 04 10:50:39 UTC 2024 | NULL |
| LastAccessTime: | Sun Jan 25 08:15:21 UTC 1970 | NULL |
| Retention: | 2147483647 | NULL |
| Location: | hdfs://adh/apps/hive/warehouse/impala_ice_test | NULL |
| Erasure Coding Policy: | NONE | NULL |
| Table Type: | EXTERNAL_TABLE | NULL |
| Table Parameters: | NULL | NULL |
| | EXTERNAL | TRUE |
| | OBJCAPABILITIES | EXTREAD,EXTWRITE |
| | accessType | 8 |
| | current-schema | {\"type\":\"struct\",\"schema-id\":0,\"fields\":[{\"id\":1,\"name\":\"txn_id\",\"required\":false,\"type\":\"int\"},{\"id\":2,\"name\":\"acc_id\",\"required\":false,\"type\":\"int\"},{\"id\":3,\"name\":\"txn_value\",\"required\":false,\"type\":\"double\"},{\"id\":4,\"name\":\"txn_date\",\"required\":false,\"type\":\"date\"}]} |
| | engine.hive.enabled | true |
| | external.table.purge | TRUE |
| | metadata_location | hdfs://adh/apps/hive/warehouse/impala_ice_test/metadata/00000-c3406504-fe59-4464-8b1f-01971fc3b949.metadata.json |
| | numFiles | 1 |
| | snapshot-count | 0 |
| | storage_handler | org.apache.iceberg.mr.hive.HiveIcebergStorageHandler |
| | table_type | ICEBERG |
| | totalSize | 1914 |
| | transient_lastDdlTime | 1720090239 |
| | uuid | 5495460c-53fe-4fb7-9120-0d5dad7fd022 |
| | write.format.default | parquet |
| | NULL | NULL |
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.iceberg.mr.hive.HiveIcebergSerDe | NULL |
| InputFormat: | org.apache.iceberg.mr.hive.HiveIcebergInputFormat | NULL |
| OutputFormat: | org.apache.iceberg.mr.hive.HiveIcebergOutputFormat | NULL |
| Compressed: | No | NULL |
| Sort Columns: | [] | NULL |
| | NULL | NULL |
| # Constraints | NULL | NULL |
+------------------------------+----------------------------------------------------+-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Параметр table_type в выводе указывает на то, что таблица была создана как Iceberg-таблица.
По умолчанию Impala создает таблицы Iceberg, используя формат данных Parquet.
Чтобы использовать ORC или AVRO, установите свойство таблицы write.format.default, как показано ниже:
CREATE TABLE default.impala_ice_test_orc (
txn_id int,
acc_id int,
txn_value double,
txn_date date)
STORED AS ICEBERG
TBLPROPERTIES('write.format.default'='ORC');
|
РЕКОМЕНДАЦИЯ
Больше информации о свойствах таблиц Iceberg можно найти в документации Impala.
|
CREATE TABLE AS SELECT
Вы можете использовать синтаксис CREATE TABLE AS <tbl_name> (CTAS) для создания таблицы Iceberg на основе уже существующей таблицы.
Например:
CREATE TABLE default.impala_ice_test_ctas
STORED AS ICEBERG
AS SELECT txn_value, txn_date FROM default.impala_ice_test;
DESCRIBE FORMATTED default.impala_ice_test_ctas;
+------------------------------+-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| name | type | comment |
+------------------------------+-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
| # col_name | data_type | comment |
| | NULL | NULL |
| txn_value | double | NULL |
| txn_date | date | NULL |
| | NULL | NULL |
| # Detailed Table Information | NULL | NULL |
| Database: | default | NULL |
| OwnerType: | USER | NULL |
| Owner: | admin | NULL |
| CreateTime: | Thu Jul 04 11:07:31 UTC 2024 | NULL |
| LastAccessTime: | Sun Jan 25 08:32:12 UTC 1970 | NULL |
| Retention: | 2147483647 | NULL |
| Location: | hdfs://adh/apps/hive/warehouse/impala_ice_test_ctas | NULL |
| Erasure Coding Policy: | NONE | NULL |
| Table Type: | EXTERNAL_TABLE | NULL |
| Table Parameters: | NULL | NULL |
| | EXTERNAL | TRUE |
| | OBJCAPABILITIES | EXTREAD,EXTWRITE |
| | accessType | 8 |
| | current-schema | {\"type\":\"struct\",\"schema-id\":0,\"fields\":[{\"id\":1,\"name\":\"txn_value\",\"required\":false,\"type\":\"double\"},{\"id\":2,\"name\":\"txn_date\",\"required\":false,\"type\":\"date\"}]} |
| | engine.hive.enabled | true |
| | external.table.purge | TRUE |
| | metadata_location | hdfs://adh/apps/hive/warehouse/impala_ice_test_ctas/metadata/00000-c3871ac4-ca86-4c6d-be6c-116f3bf7cdf9.metadata.json |
| | numFiles | 1 |
| | snapshot-count | 0 |
| | storage_handler | org.apache.iceberg.mr.hive.HiveIcebergStorageHandler |
| | table_type | ICEBERG |
| | totalSize | 1531 |
| | transient_lastDdlTime | 1720091251 |
| | uuid | 5b792d0b-4e67-4a2b-957c-86e41970c977 |
| | write.format.default | parquet |
| | NULL | NULL |
| # Storage Information | NULL | NULL |
| SerDe Library: | org.apache.iceberg.mr.hive.HiveIcebergSerDe | NULL |
| InputFormat: | org.apache.iceberg.mr.hive.HiveIcebergInputFormat | NULL |
| OutputFormat: | org.apache.iceberg.mr.hive.HiveIcebergOutputFormat | NULL |
| Compressed: | No | NULL |
| Sort Columns: | [] | NULL |
| | NULL | NULL |
| # Constraints | NULL | NULL |
+------------------------------+-----------------------------------------------------+---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+
Удаление таблицы
Вы можете удалить таблицу с помощью команды DROP TABLE <tbl_name>.
Пример:
DROP TABLE default.impala_ice_test;
Если установлено свойство таблицы external.table.purge=true, команда также удаляет файлы данных из HDFS.
По умолчанию свойство external.table.purge равно true, если таблица была создана с помощью команды CREATE TABLE в Impala.
Если таблица создана с помощью CREATE EXTERNAL TABLE (таблица уже существует и только регистрируется в каталоге), данное свойство устанавливается как false, поэтому DROP TABLE не удаляет данные таблицы, а лишь удаляет таблицу из каталога.
Таблицы Iceberg V2
Формат таблиц Iceberg V2 поддерживает обновление на уровне строк для операций DELETE и UPDATE, используя подход "merge-on-read".
При использовании этого формата, вместо того чтобы переписывать существующие файлы данных, Iceberg создает файлы удаления (delete files), которые хранят информацию об удаленных записях.
Эти файлы содержат путь к файлу и позицию удаленных строк (position deletes).
Чтобы создать таблицу Iceberg, использующую формат Iceberg V2, укажите свойство таблицы format-version=2 при создании таблицы.
Пример:
CREATE TABLE default.impala_ice_test_v2 (
txn_id int,
acc_id int,
txn_value double,
txn_date date)
STORED AS ICEBERG
TBLPROPERTIES('format-version'='2');
Вы также можете обновить существующую таблицу Iceberg V1 до версии Iceberg V2 с помощью команды ALTER TABLE.
Пример показан ниже.
ALTER TABLE default.impala_ice_test
SET TBLPROPERTIES('format-version'='2');
Эволюция схемы
Iceberg поддерживает эволюцию схемы, что позволяет переупорядочивать, удалять или изменять столбцы без ущерба для читаемости старых файлов данных (до изменения схемы).
|
ПРИМЕЧАНИЕ
Impala не поддерживает эволюцию схемы для таблиц в формате AVRO.
Дополнительная информация доступна в документации Iceberg.
|
Ниже приведены команды изменения схемы Iceberg-таблиц, поддерживаемые в Impala.
Следующая команда переименовывает таблицу Iceberg.
ALTER TABLE default.impala_ice_test
RENAME TO default.impala_ice_test_new;
Вы можете добавить столбец в существующую таблицу Iceberg, как показано ниже.
ALTER TABLE default.impala_ice_test
ADD COLUMN `comment` string;
Результат выполнения команды:
+----------------------------+ | summary | +----------------------------+ | Column(s) have been added. | +----------------------------+
Вы можете удалить столбец из существующей таблицы Iceberg, как показано ниже.
ALTER TABLE default.impala_ice_test
DROP COLUMN `comment`;
Результат выполнения команды:
+--------------------------+ | summary | +--------------------------+ | Column has been dropped. | +--------------------------+
Вы можете изменить имя столбца и его тип, если новый тип совместим со старым.
ALTER TABLE default.impala_ice_test
CHANGE txn_id txn_id BIGINT;
Вывод:
+--------------------------+ | summary | +--------------------------+ | Column has been altered. | +--------------------------+
Создание таблицы с партициями
В Impala вы можете создавать Iceberg-таблицы с партициями, используя традиционное партиционирование по значению (value-based partitioning). Синтаксис показан ниже:
CREATE TABLE default.impala_ice_test_partitioned (
txn_id int,
txn_value double,
txn_date date)
PARTITIONED BY (acc_id int)
STORED AS ICEBERG;
Также можно создать таблицу с партициями, используя одно или несколько выражений преобразования (transform expressions). Пример показан ниже.
CREATE TABLE default.impala_ice_test_partitioned_transform (
txn_id int,
acc_id int,
txn_value double,
txn_date date)
PARTITIONED BY SPEC (
BUCKET(3, acc_id), (1)
day(txn_date)) (2)
STORED AS ICEBERG;
| 1 | Первая часть выражения преобразования заставляет Iceberg распределять вставленные данные между 3 бакетами.
Для каждого значения acc_id, которое должно быть записано, Iceberg вычисляет хеш и получает остаток от деления на 3 (hash(acc_id) mod 3).
Полученное значение определяет бакет, в который будут записаны данные. |
| 2 | Затем в рамках каждого бакета Iceberg создает партиции по дате. |
Для таблицы, созданной с помощью вышеуказанной команды, Impala создает следующую структуру директорий в HDFS.
[admin@ka-adh-2 ~]$ hdfs dfs -ls -R /apps/hive/warehouse drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=0 drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=0/txn_date_day=2023-01-03 -rw-r--r-- 3 impala hadoop 1153 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=0/txn_date_day=2023-01-03/314da83d47eee296-145c34e600000000_1592985449_data.0.parq drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=1 drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=1/txn_date_day=2023-01-02 -rw-r--r-- 3 impala hadoop 1153 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=1/txn_date_day=2023-01-02/314da83d47eee296-145c34e600000000_584411471_data.0.parq drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=2 drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=2/txn_date_day=2023-01-01 -rw-r--r-- 3 impala hadoop 1153 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/data/acc_id_bucket=2/txn_date_day=2023-01-01/314da83d47eee296-145c34e600000000_1148089692_data.0.parq drwxrwxr-x - impala hadoop 0 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/metadata -rw-r--r-- 3 impala hadoop 2385 2024-07-05 14:00 /apps/hive/warehouse/impala_ice_test_partitioned_transform/metadata/00000-b04f03f7-f770-44a1-825b-8e84e4392f41.metadata.json -rw-r--r-- 3 impala hadoop 3564 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/metadata/00001-13512042-67f5-4327-933c-978d41be5df1.metadata.json -rw-r--r-- 3 impala hadoop 6539 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/metadata/24a8910e-e616-4d4b-ace5-46987f83fe9a-m0.avro -rw-r--r-- 3 impala hadoop 3804 2024-07-05 14:01 /apps/hive/warehouse/impala_ice_test_partitioned_transform/metadata/snap-4359281668985942129-1-24a8910e-e616-4d4b-ace5-46987f83fe9a.avro
Для просмотра партиций можно использовать команду SHOW PARTITIONS.
Пример вывода показан ниже.
+----------------------------------------------+----------------+-----------------+
| Partition | Number Of Rows | Number Of Files |
+----------------------------------------------+----------------+-----------------+
| {"acc_id_bucket":"0","txn_date_day":"19360"} | 1 | 1 |
| {"acc_id_bucket":"0","txn_date_day":"19361"} | 1 | 1 |
| {"acc_id_bucket":"0","txn_date_day":"19723"} | 1 | 1 |
| {"acc_id_bucket":"0","txn_date_day":"19725"} | 1 | 1 |
| {"acc_id_bucket":"1","txn_date_day":"19359"} | 1 | 1 |
| {"acc_id_bucket":"1","txn_date_day":"19360"} | 1 | 1 |
| {"acc_id_bucket":"2","txn_date_day":"19358"} | 1 | 1 |
| {"acc_id_bucket":"2","txn_date_day":"19361"} | 1 | 1 |
| {"acc_id_bucket":"2","txn_date_day":"19392"} | 1 | 1 |
+----------------------------------------------+----------------+-----------------+
Iceberg поддерживает эволюцию партиций (partition evolution), что позволяет изменять партиционирование таблицы без необходимости перезаписи существующих данных.
Партиционирование таблицы можно изменить с помощью оператора ALTER TABLE SET PARTITION SPEC, как показано в примере ниже.
ALTER TABLE default.impala_ice_test_partitioned
SET PARTITION SPEC (DAY(txn_date));
Вывод:
+-------------------------+ | summary | +-------------------------+ | Updated partition spec. | +-------------------------+
Команды DML
Запись данных
В Impala вы можете записывать данные в таблицу Iceberg с помощью команд INSERT INTO и INSERT OVERWRITE.
Пример:
INSERT INTO default.impala_ice_test VALUES
(1, 1001, 150.50, '2023-01-04'),
(2, 1002, 200.50, '2023-01-03'),
(3, 1003, 50.00, '2024-01-03');
С помощью INSERT OVERWRITE можно заменить данные в таблице на результат запроса.
Например:
INSERT OVERWRITE TABLE default.impala_ice_test_tmp
SELECT * from default.impala_ice_test;
|
ПРИМЕЧАНИЕ
Операция INSERT OVERWRITE не поддерживается для таблиц, использующих преобразование партиций типа BUCKET.
|
Удаление данных
Вы можете удалить данные из таблиц Iceberg V2 с помощью команды DELETE.
Пример:
DELETE FROM default.impala_ice_test
WHERE txn_id = 1;
|
ПРИМЕЧАНИЕ
Операция DELETE поддерживается только для таблиц Iceberg V2.
Попытка удаления строк из таблицы V1 приводит к ошибке.
|
Обновление данных
В Impala вы можете обновлять таблицы Iceberg V2 как показано в следующем примере.
UPDATE default.impala_ice_test
SET txn_value = txn_value + 100;
|
ПРИМЕЧАНИЕ
Операция UPDATE поддерживается только для таблиц Iceberg V2.
Попытка обновления данных в таблице V1 приводит к ошибке.
|
Вы также можете использовать оператор UPDATE FROM для обновления целевой таблицы Iceberg на основе некой исходной таблицы (исходная таблица необязательно должна являться Iceberg-таблицей).
Пример:
UPDATE default.impala_ice_test
SET default.impala_ice_test.acc_id = src.acc_id,
default.impala_ice_test.txn_date = src.txn_date,
FROM default.impala_ice_test, default.impala_ice_test_src src
WHERE default.impala_ice_test.txn_id = src.txn_internal_id;
Если в предложении WHERE есть несколько совпадений, Impala выдаст ошибку.
Существует несколько ограничений на использование команды UPDATE FROM, например, поддержка единственного формата Parquet, проблемы с обновлением столбцов с партициями и т. д.
Больше информации об ограничениях вы можете найти в документации Impala.
Time travel
Iceberg поддерживают функцию time travel, которая позволяет запрашивать данные из определенного снепшота таблицы, созданного в прошлом, и на который можно ссылаться по идентификатору или временной метке.
Для выполнения time-travel запросов используйте предложение FOR SYSTEM_TIME AS OF <timestamp> и FOR SYSTEM_VERSION AS OF <snapshot-id>.
Ниже приведены несколько примеров использования.
В следующем примере запрашиваются данные из ближайшего снепшота, который старше указанной временной метки:
SELECT * FROM default.impala_ice_test
FOR SYSTEM_TIME AS OF '2024-07-02 12:00:00';
Вывод:
+--------+--------+-----------+------------+ | txn_id | acc_id | txn_value | txn_date | +--------+--------+-----------+------------+ | 2 | 1002 | 63.5 | 2024-02-04 | | 1 | 1001 | 110.0 | 2023-01-01 | +--------+--------+-----------+------------+
В следующем запросе нужный снепшот определяется путем вычитания отрезка времени из текущего момента.
SELECT * FROM default.impala_ice_test
FOR SYSTEM_TIME AS OF now() - interval 1 minute;
Вывод:
+--------+--------+-----------+------------+ | txn_id | acc_id | txn_value | txn_date | +--------+--------+-----------+------------+ | 2 | 1002 | 63.5 | 2024-02-04 | +--------+--------+-----------+------------+
Следующий запрос получает данные из снепшота с указанием его ID:
SELECT * FROM default.impala_ice_test
FOR SYSTEM_VERSION AS OF 7308000224696874146;
Результат:
+--------+--------+-----------+------------+ | txn_id | acc_id | txn_value | txn_date | +--------+--------+-----------+------------+ | 1 | 1001 | 10.0 | 2023-01-01 | +--------+--------+-----------+------------+
Чтобы получить информацию о снепшотах, доступных для конкретной таблицы, используйте команду DESCRIBE HISTORY, как показано в следующем примере:
DESCRIBE HISTORY default.impala_ice_test;
Результат выполнения команды:
+-------------------------------+---------------------+---------------------+---------------------+ | creation_time | snapshot_id | parent_id | is_current_ancestor | +-------------------------------+---------------------+---------------------+---------------------+ | 2024-04-07 21:41:56.959000000 | 7308000224696874146 | NULL | TRUE | | 2024-04-07 21:42:19.537000000 | 3739750708916322181 | 7308000224696874146 | TRUE | | 2024-04-07 22:04:58.577000000 | 3634103131974849338 | 3739750708916322181 | TRUE | +-------------------------------+---------------------+---------------------+---------------------+
Roll back
При каждом изменении содержимого Iceberg-таблицы Iceberg создает снепшот для этой таблицы.
С помощью снепшотов вы можете откатить состояние таблицы к некоторой версии в прошлом, обозначенной идентификатором снепшота.
При откате таблицы создается новый снепшот с тем же идентификатором, но с новой временной меткой создания.
Используя оператор ALTER TABLE <tbl_name> EXECUTE ROLLBACK, вы можете откатить таблицу к предыдущим версиям, как показано ниже.
Например, предположим, что существует таблица Iceberg со следующим содержимым:
+--------+--------+-----------+------------+ | txn_id | acc_id | txn_value | txn_date | +--------+--------+-----------+------------+ | 2 | 1002 | 63.5 | 2024-02-04 | | 1 | 1001 | 110.0 | 2023-01-01 | +--------+--------+-----------+------------+
Следующая команда откатывает состояние таблицы до снепшота, обозначенного ID:
ALTER TABLE default.impala_ice_test
EXECUTE ROLLBACK(7308000224696874146);
После выполнения этой команды выборка из таблицы с помощью SELECT возвращает данные, которые хранились в таблице в момент создания указанного снепшота.
Например:
+--------+--------+-----------+------------+ | txn_id | acc_id | txn_value | txn_date | +--------+--------+-----------+------------+ | 1 | 1001 | 10.0 | 2023-01-01 | +--------+--------+-----------+------------+
Следующая команда откатывает таблицу до версии снепшота, который был создан раньше указанной временной метки:
ALTER TABLE default.impala_ice_test
EXECUTE ROLLBACK('2024-07-05 12:00:00');
По умолчанию Iceberg накапливает снепшоты, пока они не будут удалены пользователем.
Вы можете удалить ненужные снепшоты с помощью команды ALTER TABLE … EXECUTE expire_snapshots(<timestamp>).
Примеры:
ALTER TABLE default.impala_ice_test
EXECUTE expire_snapshots('2024-07-05 12:00:00');
ALTER TABLE default.impala_ice_test
EXECUTE expire_snapshots(now() - interval 10 days);
Конвертация типов данных Iceberg
В следующей таблице описано сопоставление типов данных Iceberg и типов SQL в Impala.
| Тип данных Iceberg | Тип SQL в Impala |
|---|---|
boolean |
BOOLEAN |
int |
INTEGER |
long |
BIGINT |
float |
FLOAT |
double |
DOUBLE |
decimal(P, S) |
DECIMAL(P, S) |
date |
DATE |
time |
— |
timestamp |
TIMESTAMP |
timestamptz |
Поддержка чтения с использованием TIMESTAMP |
string |
STRING |
uuid |
— |
fixed(L) |
— |
binary |
— |
struct |
STRUCT (только чтение) |
list |
ARRAY (только чтение) |
map |
MAP (только чтение) |