符号文件读取部分数据
symbolic file reading partial data
我已将每月数据保存在给定的 S3 存储桶中,并且可以 运行 athena 查询,没有任何问题。但如果我使用符号文件,athena 只会读取一月和七月的数据。这很奇怪。
我的符号文件看起来像这样...
s3://some_bucket/sub_bucket/no_details_201801.csv.gz
s3://some_bucket/sub_bucket/no_details_201802.csv.gz
s3://some_bucket/sub_bucket/no_details_201803.csv.gz
s3://some_bucket/sub_bucket/no_details_201804.csv.gz
s3://some_bucket/sub_bucket/no_details_201805.csv.gz
s3://some_bucket/sub_bucket/no_details_201806.csv.gz
s3://some_bucket/sub_bucket/no_details_201807.csv.gz
s3://some_bucket/sub_bucket/no_details_201808.csv.gz
s3://some_bucket/sub_bucket/no_details_201808.csv.gz
s3://some_bucket/sub_bucket/no_details_201810.csv.gz
s3://some_bucket/sub_bucket/no_details_201811.csv.gz
s3://some_bucket/sub_bucket/no_details_201812.csv.gz
在这 12 个文件中,有 2 个月的数据文件丢失,雅典娜没有抱怨。那很好。但它没有读取其余 10 个文件。那没问题。但它似乎只读取 2 个文件(随机选择),这是不可接受的。
有没有人用雅典娜符号文件经历过这个?
我假设您使用的是 SymlinkTextInputFormat
。如果符号链接文件中缺少任何文件,EMR 上的 Athena 和 Presto 都应该无法查询。我无法重现该问题。
CREATE EXTERNAL TABLE `symlink_test`(
`col1` string,
`col2` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='`',
'separatorChar'=',')
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://my-bucket/datasets/symlink'
如果符号链接中的任何文件不存在,Athena 和 Presto 会给出类似于以下内容的错误消息:
HIVE_UNKNOWN_ERROR: Input path does not exist:[...]
我已将每月数据保存在给定的 S3 存储桶中,并且可以 运行 athena 查询,没有任何问题。但如果我使用符号文件,athena 只会读取一月和七月的数据。这很奇怪。
我的符号文件看起来像这样...
s3://some_bucket/sub_bucket/no_details_201801.csv.gz
s3://some_bucket/sub_bucket/no_details_201802.csv.gz
s3://some_bucket/sub_bucket/no_details_201803.csv.gz
s3://some_bucket/sub_bucket/no_details_201804.csv.gz
s3://some_bucket/sub_bucket/no_details_201805.csv.gz
s3://some_bucket/sub_bucket/no_details_201806.csv.gz
s3://some_bucket/sub_bucket/no_details_201807.csv.gz
s3://some_bucket/sub_bucket/no_details_201808.csv.gz
s3://some_bucket/sub_bucket/no_details_201808.csv.gz
s3://some_bucket/sub_bucket/no_details_201810.csv.gz
s3://some_bucket/sub_bucket/no_details_201811.csv.gz
s3://some_bucket/sub_bucket/no_details_201812.csv.gz
在这 12 个文件中,有 2 个月的数据文件丢失,雅典娜没有抱怨。那很好。但它没有读取其余 10 个文件。那没问题。但它似乎只读取 2 个文件(随机选择),这是不可接受的。 有没有人用雅典娜符号文件经历过这个?
我假设您使用的是 SymlinkTextInputFormat
。如果符号链接文件中缺少任何文件,EMR 上的 Athena 和 Presto 都应该无法查询。我无法重现该问题。
CREATE EXTERNAL TABLE `symlink_test`(
`col1` string,
`col2` string)
ROW FORMAT SERDE
'org.apache.hadoop.hive.serde2.OpenCSVSerde'
WITH SERDEPROPERTIES (
'escapeChar'='\',
'quoteChar'='`',
'separatorChar'=',')
STORED AS INPUTFORMAT
'org.apache.hadoop.hive.ql.io.SymlinkTextInputFormat'
OUTPUTFORMAT
'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION
's3://my-bucket/datasets/symlink'
如果符号链接中的任何文件不存在,Athena 和 Presto 会给出类似于以下内容的错误消息:
HIVE_UNKNOWN_ERROR: Input path does not exist:[...]