【问题标题】:Athena table with multiple locations具有多个位置的 Athena 表
【发布时间】:2017-10-19 05:03:19
【问题描述】:

我的数据分布在多个目录和这些目录中的多个制表符分隔的文件中。一般结构如下所示:

s3://bucket_name/directory/{year}{month}/{iso_2}/{year}{month}{day}_table.bcp.gz

其中{year} 是 4 位数年份,{month} 是 2 位数月份,{day} 是 2 位数日期,{iso_2} 是 ISO2 国家代码。

如何在 Athena 中将其设置为表格?

【问题讨论】:

    标签: hive amazon-athena


    【解决方案1】:

    Athena 使用 Hive DDL,所以你只需要运行一个普通的 Hive create 语句:

    CREATE EXTERNAL TABLE table_name(
      col_1 string,
    ...
      col_n string)
    PARTITIONED BY (
       year_month string,
       iso_2 string)
    ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
    STORED AS TEXTFILE
    LOCATION 's3://bucket_name/directory/';
    

    然后通过运行MSCK REPAIR TABLE table_name 将这些目录注册为所需表的新分区。如果由于某种原因失败(有时在 Athena 中会失败),您需要为现有目录运行所有添加分区语句:

    ALTER TABLE table_name ADD PARTITION 
         (year_month=201601,iso=US) LOCATION 's3://bucket_name/directory/201601/US/'; 
    ALTER TABLE table_name ADD PARTITION 
         (year_month=201602,iso=US) LOCATION 's3://bucket_name/directory/201602/US/';
    ALTER TABLE table_name ADD PARTITION 
         (year_month=201601,iso=GB) LOCATION 's3://bucket_name/directory/201601/GB/';
    etc.
    

    【讨论】:

    • 有没有办法自动执行ALTER?就像让雅典娜拿起它们而不必一遍又一遍地指定它们?从here 看来我们不能。
    猜你喜欢
    • 2021-02-01
    • 2013-07-31
    • 2014-05-14
    • 1970-01-01
    • 2015-06-12
    • 2016-12-30
    • 1970-01-01
    • 2014-02-12
    相关资源
    最近更新 更多