簡體   English   中英

如何使用Amazon Athena創建僅包含某些特定文件(通配符)的表?

[英]How can I create a table with only some specific files (wildcard) using Amazon Athena?

我的桶以前有這種結構:

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');

我在尋找同樣的事情。 不幸的是,這是不可能的,因為s3 api不是那種通配符友好(需要掃描客戶端的所有密鑰,這很慢)。 athena的文檔還指出這不受支持。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM