1

我正在查看 AWS Athena 的新冰山表。我希望将我的数据湖转移到 Iceberg,这样我就可以显着降低表分区管理的复杂性,并希望获得更好的性能。我创建了一个包含两个字段的测试冰山表:event_datelog.

CREATE TABLE ACME.iceberg_test (
    event_date timestamp, 
    log string
)
PARTITIONED BY ( 
    hour(event_date)
)
LOCATION
    's3://ACME/iceberg_test'
TBLPROPERTIES (
    'table_type'='ICEBERG',
    'compaction_bin_pack_target_file_size_bytes'='536870912'
);

这会在ACME中创建一个带有元数据等的新 S3 前缀。我查询这个新的空表需要 14 秒才能产生 0 个结果。

我用 20 个样本行加载它:

INSERT INTO iceberg_test
VALUES
(timestamp '2021-12-20 01:30:00', 'hello'),
(timestamp '2021-12-20 02:30:00', 'hello'),
(timestamp '2021-12-20 03:30:00', 'hello'),
(timestamp '2021-12-20 04:30:00', 'hello'),
(timestamp '2021-12-20 05:30:00', 'hello'),
(timestamp '2021-12-20 06:30:00', 'hello'),
(timestamp '2021-12-20 07:30:00', 'hello'),
(timestamp '2021-12-20 08:30:00', 'hello'),
(timestamp '2021-12-20 09:30:00', 'hello'),
(timestamp '2021-12-20 10:30:00', 'hello'),
(timestamp '2021-12-20 11:30:00', 'hello'),
(timestamp '2021-12-20 12:30:00', 'hello'),
(timestamp '2021-12-20 13:30:00', 'hello'),
(timestamp '2021-12-20 14:30:00', 'hello'),
(timestamp '2021-12-20 15:30:00', 'hello'),
(timestamp '2021-12-20 16:30:00', 'hello'),
(timestamp '2021-12-20 17:30:00', 'hello'),
(timestamp '2021-12-20 18:30:00', 'hello'),
(timestamp '2021-12-20 19:30:00', 'hello'),
(timestamp '2021-12-20 20:30:00', 'hello');

为了更好地衡量,在其上运行他们的“OPTIMIZE”命令,我认为它只会进行压缩,但认为它也可能会运行一些分区发现。

OPTIMIZE iceberg_test REWRITE DATA
  USING BIN_PACK;

但是在这里返回我的 20 行仍然需要 14 秒。看起来我没有正确配置我的表并且它没有有效地使用分区。我什至尝试添加一个完全超出我提供的样本数据范围的分区谓词:

SELECT * FROM iceberg_test WHERE event_date < timestamp '2021-10-10';

仍然需要14s。

我不确定除了注册分区之外我还应该做什么。为什么我的冰山表没有使用已知的分区元?我怎样才能让 Iceberg 做一些分区发现?

4

0 回答 0