【问题标题】:partitioned json queries in athena return no data雅典娜中的分区 json 查询不返回数据
【发布时间】:2022-01-03 23:30:16
【问题描述】:

一段时间以来,我一直在尝试设置 athena 数据库,我似乎正确设置了数据库,但是当我查询它时,它没有返回任何数据。我查询的数据是一系列分区的S3文件,结构为

"S3://bucket_name/data1=partition_1/data2=partition_2/data3=partition_3/data4=partition_4/file.json"

一个分区中可以有多个file.json,例如

"S3://bucket_name/data1=partition_1/data2=partition_2/data3=partition_3/data4=partition_4/file1.json"
"S3://bucket_name/data1=partition_1/data2=partition_2/data3=partition_3/data4=partition_4/file2.json"

以下是我正在运行的查询以及创建命令和存储的数据

CREATE EXTERNAL TABLE bench_logs (
  id string,
  filename string,
  data struct<transmit_start: timestamp, 
                     transmit_end:timestamp, 
                     transfer_start:timestamp,
                     transfer_end:timestamp,
                     processing_start:timestamp, 
                     processing_end:timestamp>
  )
PARTITIONED BY ( 
  partition_1 string, 
  partition_2 string, 
  partition_3 date, 
  partition_4 string
  )
ROW FORMAT SERDE 
  'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES ('ignore.malformed.json' = 'true')
LOCATION
  's3://benchmark-files/complete/'
TBLPROPERTIES (
  'classification'='json',
  'storage.location.template'='s3://iceqube-benchmark-files/complete/partition_1=${partition_1}/partition_2=${partition_2}/partition_3=${partition_3}/partition_4=${partition_4}/')

正在查询该表:

SELECT id FROM "benchmark"."bench_logs"
WHERE partition_1='foo'
AND partition_2='bar' 
AND partition_3=cast('1970-01-01' as date) 
AND partition_4='09:30:00';

查询说它运行正确,但除了列标题之外我没有看到任何数据。

如果需要更多数据而无法提供,我已经被困了几天,根本无法理解它。提前致谢。

【问题讨论】:

    标签: json amazon-web-services amazon-s3 amazon-athena


    【解决方案1】:

    在您可以查询分区表之前you must add the partitions to it。这可以通过ALTER TABLE bench_logs ADD PARTITION …partition projectionas well as other ways 来完成。

    此外,您似乎混淆了 Hive 分区方案的键和值:如果分区键称为 partition_1,则 S3 URI 应该是 …/partition_1=data_1/…不是 …/data_1=partition_1/… .

    【讨论】:

      【解决方案2】:

      回来以防其他人有这些问题。

      我听从了 Theo 的建议,但仍然无法查询。

      原来问题在于分区的值包含“:”,因为这通常是 S3 中的受限字符,但当我以编程方式编写时,它被允许通过。

      对此的完整解释更好地回答here

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2023-01-04
        • 1970-01-01
        • 2019-03-28
        • 2021-11-16
        • 2019-04-29
        • 2020-08-11
        • 1970-01-01
        • 2022-10-17
        相关资源
        最近更新 更多