我想优化在 xxresto/hive sql 上运行的查询的计算时间,我在 redshift 上使用的技术之一是提高临时表的效率,如下所示。
BEGIN;
CREATE TEMPORARY TABLE my_temp_table(
column_a varchar(128) encode lzo,
column_b char(4) encode bytedict)
distkey (column_a) -- Assuming you intend to join this table on column_a
sortkey (column_b) -- Assuming you are sorting or grouping by column_b
;
INSERT INTO my_temp_table SELECT column_a, column_b FROM my_table;
COMMIT;
我在xxresto/hive sql上试过,但不支持。请问你知道在xxresto/hive sql上这个技术的等价物吗?
非常感谢
2条答案
按热度按时间r8uurelv1#
我不是redshiftMaven,但似乎你想预先计算一个数据集,通过选定的列进行分布和排序,这样查询起来更快。
这与 xxresto hive 连接器的能力相对应。
分割数据 -- 分割列中具有相同值的数据将形成一个单一的分区,也就是存储上的一个文件夹;不要在高卡数列上使用分割。
桶数据 -- 在文件中使用桶列的哈希值对数据进行分组;这在一定程度上类似于分区,这是由
bucketed_by
和bucket_count
表属性定义的。排序数据 -- 在数据文件中,数据按照给定的列进行排序,这是用
sorted_by
表属性定义的。参见 trino (以前的 xxresto sql) hive 连接器文档中的例子。
注意:虽然我意识到目前文档很少,但我提交了一个问题来改进它。同时,你可以得到更多关于 trino(以前是 presto sql)社区懈怠的信息。
wdebmtf22#
redshift是关系型数据库,presto是一个分布式的xxsql查询引擎。presto目前不支持创建临时表,也不支持创建索引。但你可以通过 "CREATE TABLE AS "创建基于xxsql语句的表。
你通过两种方式优化presto的性能。
优化查询本身
优化基础数据的存储方式
其中最好的一篇文章是亚马逊Athena的十大性能调整技巧--Athena是基于presto 0.172的aws服务,因此这些技巧也应该适用于presto。