Amazon Redshift 中的半結構化資料 - Amazon Redshift

自 2025 年 11 月 1 日起,Amazon Redshift 將不再支援建立新的 Python UDFs。如果您想要使用 Python UDFs,請在該日期之前建立 UDFs。現有的 Python UDFs將繼續如常運作。如需詳細資訊,請參閱部落格文章

本文為英文版的機器翻譯版本,如內容有任何歧義或不一致之處,概以英文版為準。

Amazon Redshift 中的半結構化資料

透過在 Amazon Redshift 中使用半結構化資料支援,您可以在 Amazon Redshift 資料倉儲中擷取和存放半結構化資料。使用 SUPER 資料類型和 PartiQL 語言,Amazon Redshift 擴展了資料倉儲功能,以與 SQL 和 NoSQL 資料來源整合。如此一來,Amazon Redshift 就能對關聯式和半結構化的儲存資料進行有效的分析,例如 JSON。如需 Amazon Redshift 與 PartiQL 整合的相關資訊,請參閱 PartiQL – Amazon Redshift 的 SQL 相容查詢語言

Amazon Redshift 提供兩種形式的半結構化資料支援:SUPER 資料類型和 Amazon Redshift Spectrum。

您可以透過將半結構化資料擷取至 Amazon Redshift 並將其存放在 SUPER 資料類型中,或使用 Amazon Redshift Spectrum 查詢存放在 Amazon S3 中的資料,來查詢半結構化資料。

使用半結構化資料的最佳實務

使用半結構化資料時,請考慮下列最佳實務。

  • 使用 SUPER 資料時,建議您將 enable_case_sensitive_super_attributeenable_case_sensitive_identifier組態選項設定為 true。如需詳細資訊,請參閱enable_case_sensitive_super_attributeenable_case_sensitive_identifier

  • 使用 COPY 命令將資料從 Amazon S3 儲存貯體載入 Amazon Redshift SUPER 資料欄。

  • 使用 PartiQL 動態輸入和寬鬆語意,對 SUPER 資料值執行臨機操作查詢,而無需在查詢之前強加結構描述。如需動態輸入的資訊,請參閱 動態類型。如需寬鬆語意的資訊,請參閱 寬鬆的語義

  • 如果您打算經常查詢資料,請使用 PartiQL 將無結構和半結構化資料分割成具體化視觀表。當您對分解資料執行分析時,Amazon Redshift 具體化視觀表的單欄式組織可提供更好的效能。此外,需要擷取資料的傳統結構描述的使用者和商業智慧 (BI) 工具可以使用檢視 (無論是具體化或虛擬化) 做為傳統的資料結構描述呈現方式。

    在 PartiQL 具體化視觀表將 JSON 或 SUPER 中的資料擷取到傳統的資料欄式具體化視觀表之後,您可以查詢具體化視觀表。如需具體化視觀表的資訊,請參閱 Amazon Redshift 中的具體化視觀表。如需 SUPER 資料類型如何與具體化視觀表搭配運作的相關資訊,請參閱SUPER 資料類型和具體化視觀表

SUPER 資料類型使用的概念

接下來,您可以找到一些 Amazon Redshift SUPER 資料類型概念。

了解 Amazon Redshift 中的 SUPER 資料類型是什麼 - SUPER 資料類型是一種 Amazon Redshift 資料類型,可儲存無結構描述陣列和包含 Amazon Redshift 純量以及可能巢狀陣列和結構的結構。SUPER 資料類型可原生存放不同格式的半結構化資料,例如 JSON 或源自文件導向來源的資料。您可以新增 SUPER 資料欄來存放半結構化資料,並寫入存取 SUPER 資料欄的查詢,以及一般純量資料欄。如需 SUPER 資料類型的相關資訊,請參閱 SUPER 類型

無結構描述 JSON 擷取至 SUPER – 使用彈性的半結構化 SUPER 資料類型,Amazon Redshift 可以將無結構描述 JSON 接收並擷取至具有 SUPER 資料類型的資料欄。例如,您可以使用 COPY 命令,將 JSON 值擷取[10.5, “first”]至 SUPER 資料類型資料欄。資料欄會保留 SUPER 值[10.5, ‘first’]。您也可以使用 擷取 JSONJSON_PARSE 函數。預設情況下,COPY 和 json_parse 都使用嚴格的剖析語義來擷取 JSON。您還可以使用資料庫資料本身來建構 SUPER 值,包括陣列和結構。

擷取無結構描述 JSON 的彈性結構時,SUPER 資料欄不需要修改結構描述。例如,在分析點擊流時,您最初將具有屬性「IP」和「時間」的「點擊」結構儲存在 SUPER 欄中。您可以在不變更結構描述的情況下新增屬性「customer id」,以擷取此類變更。

用於 SUPER 資料類型的原生格式是一種二進位格式,其所需空間小於文字形式的 JSON 值。如此可在查詢時加快 SUPER 值的擷取和執行期處理速度。

使用 PartiQL 查詢 SUPER 資料 – PartiQL 是 SQL-92 的回溯相容擴充功能,許多 AWS 服務目前使用。使用 PartiQL 後,熟悉的 SQL 建構可無縫結合對傳統表格式 SQL 資料和 SUPER 半結構化資料的存取。您可以執行物件和陣列導覽以及解除巢狀化陣列。PartiQL 擴展了標準 SQL 語言,以宣告方式表達和處理巢狀和多值資料。

PartiQL 是 SQL 的擴充功能,其中 SUPER 欄的巢狀和無結構描述資料是一流的公民。PartiQL 不要求在查詢編譯時對所有查詢運算式進行類型檢查。這種方法可讓包含 SUPER 資料類型的查詢運算式,在存取 SUPER 欄內的實際資料類型時,在查詢執行期間以動態方式輸入。此外,PartiQL 在寬鬆模式下運作,其中類型不一致不會導致失敗,但會傳回 null。無結構描述和鬆散查詢處理的組合使得 PartiQL 非常適合擷取、載入、轉換 (ELT) 應用程式,其中 SQL 查詢會評估 SUPER 欄中擷取的 JSON 資料。

如需 Amazon Redshift PartiQL 的詳細資訊,請參閱 PartiQL – Amazon Redshift 的 SQL 相容查詢語言。如需動態輸入的資訊,請參閱 動態類型。如需鬆散查詢處理的資訊,請參閱 寬鬆的語義

與 Redshift Spectrum 整合 - 當透過 JSON、Parquet 和其他具有巢狀資料的格式執行 Redshift Spectrum 查詢時,Amazon Redshift 支援 PartiQL 的多個面向。Redshift Spectrum 僅支援具有結構描述的巢狀資料。例如,使用 Redshift Spectrum,您可以宣告您的 JSON 資料在結構描述 nested_schemaful_example中具有 屬性ARRAY<STRUCT<a:INTEGER, b:DECIMAL(5,2)>>。此屬性的結構描述決定了資料永遠包含陣列,其中包含整數 a 和小數 b 的結構。如果資料變更為包含更多屬性,類型也會變更。相反地,SUPER 資料類型不需要結構描述。您可以使用具有不同屬性或類型的結構元素來儲存陣列。此外,值可以存放在陣列之外。

使用 SUPER 類型資料的考量

使用 SUPER 資料時,請考慮以下事項:

如需 SUPER 組態的相關資訊,請參閱SUPER 組態