我正在查看 AWS Athena 的新冰山表。我希望将我的数据湖转移到 Iceberg,这样我就可以显着降低表分区管理的复杂性,并希望获得更好的性能。我创建了一个包含两个字段的测试冰山表:event_date
和log
.
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 做一些分区发现?