【问题标题】:How can I create a table with only some specific files (wildcard) using Amazon Athena?如何使用 Amazon Athena 创建仅包含某些特定文件(通配符)的表?
【发布时间】:2017-05-30 19:58:17
【问题描述】:

我的存储桶曾经是这样的结构:

mybucket/raw/i1.json
mybucket/raw/i2.json

使用以下代码创建 Amazon Athena 非常简单直接 桌子。

CREATE EXTERNAL TABLE IF NOT EXISTS myclients.big_clients (
  `id_number` string,
  `txt` string,
   ...
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
) LOCATION 's3://mybucket/raw/'
TBLPROPERTIES ('has_encrypted_data'='false');

现在我在迁移存储桶结构时遇到了一些问题。

桶中的新结构如下所示。

mybucket/raw/1/i1.json
mybucket/raw/1/docs/doc_1.json
mybucket/raw/1/docs/doc_2.json
mybucket/raw/1/docs/doc_3.json
mybucket/raw/2/i2.json
mybucket/raw/2/docs/doc_1.json
mybucket/raw/2/docs/doc_2.json

我希望我现在可以创建两个表(迁移前的同一个表和一个仅包含文档的新表。) 有什么办法可以做到这一点,而不必在另一个文件夹中重新排列我的文件? 我正在为创建表时的存储桶文件搜索某种通配符。

CREATE EXTERNAL TABLE IF NOT EXISTS myclients.big_clients (
  `id_number` string,
  `txt` string,
   ...
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
  'input.regex' = 'i*.json'
) LOCATION 's3://mybucket/raw/'
TBLPROPERTIES ('has_encrypted_data'='false');

CREATE EXTERNAL TABLE IF NOT EXISTS myclients.big_clients_docs (
  `dt` date,
  `txt` string,
  `id_number` string,
  `s3_doc_path` string,
  `s3_doc_path_origin` string
)
ROW FORMAT SERDE 'org.openx.data.jsonserde.JsonSerDe'
WITH SERDEPROPERTIES (
  'serialization.format' = '1',
  'input.regex' = 'doc_*.json'
) LOCATION 's3://mybucket/raw/'
TBLPROPERTIES ('has_encrypted_data'='false');

【问题讨论】:

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


    【解决方案1】:

    我也在寻找同样的东西。不幸的是,这是不可能的,因为 s3 api 对通配符不友好(需要扫描客户端的所有密钥,这很慢)。 athena 的文档也声明不支持。

    【讨论】:

      猜你喜欢
      • 2023-04-03
      • 1970-01-01
      • 2023-04-10
      • 2011-02-28
      • 1970-01-01
      • 1970-01-01
      • 2022-01-10
      • 2019-11-21
      • 2020-03-19
      相关资源
      最近更新 更多