Sql 针对高基数字段的Apache Impala优化

Sql 针对高基数字段的Apache Impala优化,sql,hadoop,database-design,business-intelligence,impala,Sql,Hadoop,Database Design,Business Intelligence,Impala,我需要为ApacheImpala创建一个表,该表将存储大量数据。 结构如下: time_key date organization_name string client_id string kpi1 kpi2 ... 目标是以一种存储数据的方式,在通过特定的时间键、组织名称和客户端id查询数据时,数据的延迟可能最低 我可以将time\u key和organization\u name字段设置为分区键,这会导致基数较低。但是client_id字段有数百万个唯一值。所以我猜基于hdfs目录的分区是

我需要为ApacheImpala创建一个表,该表将存储大量数据。
结构如下:

time_key date
organization_name string
client_id string
kpi1
kpi2
...
目标是以一种存储数据的方式,在通过特定的时间键组织名称客户端id查询数据时,数据的延迟可能最低

我可以将time\u keyorganization\u name字段设置为分区键,这会导致基数较低。但是client_id字段有数百万个唯一值。所以我猜基于hdfs目录的分区是行不通的

客户端id仅由数字表示,其长度是固定的

我在考虑几个选择:

  • 客户机\u id字段创建固定数量的分区,每个分区表示特定的间隔,例如id的第一位或最后一位

  • 蜂箱扣有什么用吗?我不确定黑斑羚是否能够使用它,我也不确定它是否会影响表格扫描速度

  • 我没有发现任何关于它的东西,但也许黑斑羚有某种索引或类似的功能

目前,我没有机会在real cluster上使用真实数据测试Impala,因此我需要对存储客户端id字段做出正确的猜测


正确的方法是什么?

“当[composite key ID]查询时,延迟可能最低”>>这与“商业智能”和OLAP无关。如果你真的想要一个低延迟的键/值DB,可以查看HBase、Cassandra等。记录在案的是,Apache CarbonData是一种(相当实验性的)Hadoop文件格式,它是一个带有最小/最大元数据的列,用于跳过扫描访问(如ORC或Parquet),但也带有用于键访问的嵌入式索引。但它是为火花设计的;Hive接口刚刚推出,没有经过战斗测试。此外,Cloudera还发布了Kudu,它是HBase和HDFS的一种混合体,带有(粗糙的)黑斑羚接口。它应该允许通过关键查询“更快”;但其主要目标是允许流式插入(HDFS不是专门为其设计的)。@SamsonScharfrichter感谢您的回复,该信息非常有用。“当[composite key ID]查询时,尽可能降低延迟”>>这与“商业智能”和OLAP无关。如果你真的想要一个低延迟的键/值DB,可以查看HBase、Cassandra等。记录在案的是,Apache CarbonData是一种(相当实验性的)Hadoop文件格式,它是一个带有最小/最大元数据的列,用于跳过扫描访问(如ORC或Parquet),但也带有用于键访问的嵌入式索引。但它是为火花设计的;Hive接口刚刚推出,没有经过战斗测试。此外,Cloudera还发布了Kudu,它是HBase和HDFS的一种混合体,带有(粗糙的)黑斑羚接口。它应该允许通过关键查询“更快”;但是主要的目标是允许流式插入(HDFS不是为之设计的)。@SamsonScharfrichter谢谢你的回复,这些信息很有用。