簡體   English   中英

AWS Athena 從從 S3 的 GLUE 爬蟲輸入 csv 創建的表中返回零記錄

[英]AWS Athena Returning Zero Records from Tables Created from GLUE Crawler input csv from S3

第一部分:

我嘗試在 s3 中加載的虛擬 csv 上運行膠水爬蟲,它創建了一個表,但是當我嘗試在 athena 中查看表並查詢它時,它顯示返回了零記錄。

但是ELB在Athena中的demo數據是可以正常使用的。

第二部分(場景:)

假設我有一個 excel 文件和數據字典,說明該文件中數據的存儲方式和格式,我希望將該數據轉儲到 AWS Redshift 實現此目的的最佳方法是什么?

我遇到了同樣的問題。 您需要將文件夾路徑而不是真實文件名提供給爬蟲並運行它。 我嘗試將文件夾名稱提供給爬蟲,它奏效了。 希望這會有所幫助。 讓我知道。 謝謝,

我遇到了同樣的問題。 嘗試為 s3 存儲桶中的單個表創建單獨的文件夾,而不是重新運行膠水爬蟲。您將在膠水數據目錄中獲得一個與 s3 存儲桶文件夾名稱相同名稱的新表。

刪除 Crawler 的再次創建 Crawler(在 s3 中應該只有一個 csv 文件不應該更多並運行爬蟲)重要說明一個 CSV 文件運行它我們可以在 Athena 中查看記錄。

我確實提供了 S3 文件夾路徑而不是文件名,但仍然無法讓 Athena 返回任何記錄(“返回零記錄”、“掃描的數據:0KB”)。

原來問題是輸入文件(我從 Elastic Beanstalk 自動上傳到 S3 的旋轉日志文件)以下划線( _ )開頭,例如_var_log_nginx_rotated_access.log1534237261.gz 顯然這是不允許的。

解決方案:即使folder內有很多files也要選擇folder路徑。 這將生成一張表並顯示數據。

因此,在許多此類情況下,在 Glue Crawler 中使用 EXCLUDE PATTERN 對我有幫助。

這是肯定的,而不是直接將爬蟲指向文件,我們應該將它指向目錄,即使在我們沒有得到任何記錄時這樣做,排除模式也可以挽救。 您將不得不設計一些模式,通過該模式僅抓取您想要的文件並排除其余文件。 (建議這樣做而不是為每個文件創建不同的目錄,並且大部分時間在生產存儲桶中,進行此類更改是不可行的)

我在 S3 存儲桶中有數據! 有多個目錄,每個目錄中有 snappy parquet 文件和 json 文件。 json 文件導致了這個問題。

所以我在包含許多目錄的主目錄上運行爬蟲,並在我給出的排除模式中 - * / *.json

這一次,它沒有為 json 文件創建任何表,我能夠使用 Athena 查看表的記錄。

供參考 - https://docs.aws.amazon.com/glue/latest/dg/define-crawler.html

s3 存儲桶/文件夾的結構非常重要:

s3://<bucketname>/<data-folder>/
    /<type-1-[CSVs|Parquets etc]>/<files.[csv or parquet]>
    /<type-2-[CSVs|Parquets etc]>/<files.[csv or parquet]>
    ...
    /<type-N-[CSVs|Parquets etc]>/<files.[csv or parquet]>

並在 Glue Crawler 的“包含路徑”中指定:

s3://<bucketname e.g my-s3-bucket-ewhbfhvf>/<data-folder e.g data>

將膠水爬蟲指向 S3 文件夾而不是實際文件就可以了。

以下是對我有用的方法:我需要將所有 CSV 移到它們自己的文件夾中,僅將 Glue Crawler 指向父文件夾(對我來說是“csv/”)是不夠的。

csv/allergies.csv -> fails

csv/allergies/allergies.csv -> succeeds

然后,我將 AWS Glue Crawler 指向 csv/,一切都被很好地解析出來。

暫無
暫無

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

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