簡體   English   中英

紅移。 從 S3 上的無效 JSON 復制

[英]Redshift. COPY from invalid JSON on S3

我正在嘗試將數據從 S3 上的 JSON 文件加載到 Redshift 中。

但此文件包含格式錯誤 - 行 QUOTES '$'

${"id":1,"title":"title 1"}$
${"id":2,"title":"title 2"}$

從 PostgreSQL 導出數據時出錯。

現在,當我嘗試將數據加載到 Redshift 時,我收到 raw_line“$”的消息“Invalid value”。

有什么方法可以使用 Redshift COPY 命令轉義這些符號並避免數據重新上傳或轉換?

我的命令

-- CREATE TABLE
create table my_table (id BIGINT, title VARCHAR);

-- COPY DATA FROM S3
copy my_table from 's3://my-bucket/my-file.json' 
credentials 'aws_access_key_id=***;aws_secret_access_key=***'
format as json 'auto'

提前致謝!

我不認為有一個簡單的“忽略此”選項適用於您的情況。 您可以嘗試NULL AS '$'但我希望這只會以不同的方式混淆事物。

最好的辦法是過濾文件並用固定版本替換原件。 正如您在評論中指出的那樣,由於大小原因,將它們下載到您的系統、修改和推回不是一個好的選擇。 這將影響您的傳輸速度(通過 inte.net)和 S3 的數據輸出成本。 您想在 AWS 的“內部”執行此操作。

有多種方法可以做到這一點,我希望最好的選擇是基於您可以快速完成的操作,而不是絕對最好的方法。 (聽起來這是一次性修復操作。)以下是一些:

  • 啟動一個 EC2 實例並對 AWS 內部的這個系統執行下載-修改-上傳過程。 請記住在您的 VPC 中有一個 S3 端點。
  • 創建一個 Lambda function 到 stream 中的數據,修改,推回S3。 只需將此作為一個流處理過程即可,因為您不想將非常大的文件完整下載到 Lambda。
  • 定義一個 Glue 過程以去除不需要的字符。 這將需要一些自定義編碼,因為您的文件不是有效的 json 格式。
  • 使用 CloudShell 下載、修改和上傳文件。 CloudShell 有 1GB 的存儲限制,因此這需要處理較小的數據塊,但不需要您啟動 EC2。 這是一項新服務,因此此路徑可能存在其他問題,但可能是一個有趣的選擇。

還有其他可能的選擇(EMR),但這些似乎是可能的選擇。 我喜歡玩新事物(尤其是免費的時候),所以如果是我,我會嘗試 CloudShell。

暫無
暫無

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

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