我在雅典娜创建了我的第一个兽人表。
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(