ORC 格式扫描每个查询中的所有表



我在雅典娜创建了我的第一个兽人表。

CREATE EXTERNAL TABLE `orc_test`(
 `hexid` string,
 `version` int,
 `ts` int,
 `campaignid` int,
 `sourceuid` string,
 `publisherid` string,
 `adslot` string,
 `share` double,
 `earn` double,
 `spent` double,
 `rebate` double,
 `payout` double,
 `cost` double,
 `ip` string,
 `useragent` string,
 `referer` string,
 `param1` string,
 `param2` string,
 `param3` string,
 `param4` string,
 `param5` string,
 `param6` string,
 `appid` string,
 `bundleid` string,
 `deviceid` string,
 `uuid` string,
 `callbackurl` string)
PARTITIONED BY (
 `year` string,
 `month` string,
 `day` string,
 `hour` string,
 `minute` string) 
STORED AS orc
LOCATION
 ‘s3://someplace/orc_2’
TBLPROPERTIES (‘orc.compress’=‘SNAPPY’)

当我执行查询以搜索特定数据(例如十六进制(时。查询将扫描整个表。作为一个列式表,它不是只在 hexId 列上搜索而不扫描整个表吗?

我想我错过了一些东西。

谢谢!

PD:对不起我的英语!

我相信只有在 WHERE 子句中使用分区列时,您才会减少扫描的数据,以便 Athena 可以识别要扫描的分区子集。 在表定义中,hexid 不是分区字段,因此 Athena 必须扫描整个数据集以识别行。

有关详细信息,请参阅 Athena 文档中的数据分区。

请看这篇文章:https://forums.aws.amazon.com/message.jspa?messageID=841338#841338列式读取可用性似乎取决于 ORC 条带大小。在 Presto 中默认为 8MB(而 Athena 使用 Presto(,您的 ORC 文件必须包含大于 8MB 的条带。低于该限制,将读取整个文件。

AWS Athena 在 Parquet 文件方面没有这个问题。但是,请注意复杂的镶木地板数据类型:

"当您查询具有复杂数据类型(数组、映射、结构(的列并使用 Parquet 存储数据时,Athena 当前会读取整行数据,而不是按预期有选择地仅读取指定的列。这是一个已知问题。(所有限制:https://docs.aws.amazon.com/athena/latest/ug/other-notable-limitations.html(

最新更新