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

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

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’]。您也可以使用 JSON_PARSE 函數 擷取 JSON。預設情況下,COPY 和 json_parse 都使用嚴格的剖析語義來擷取 JSON。您還可以使用資料庫資料本身來建構 SUPER 值,包括陣列和結構。

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

SUPER 資料類型所使用的原生格式是二進位格式,與文字形式的 JSON 值相比,它所需的空間較少。如此可在查詢時加快 SUPER 值的擷取和執行期處理速度。

使用 PartiQL 查詢 SUPER 資料 - PartiQL 是目前許多 AWS 服務目前使用的 SQL-92 回溯相容擴充功能。透過使用 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 資料在結構描述 ARRAY<STRUCT<a:INTEGER, b:DECIMAL(5,2)>> 中具有 nested_schemaful_example 屬性。此屬性的結構描述決定了資料永遠包含陣列,其中包含整數 a 和小數 b 的結構。如果資料變更為包含更多屬性,類型也會變更。相反地,SUPER 資料類型不需要結構描述。您可以使用具有不同屬性或類型的結構元素來儲存陣列。此外,值可以儲存在陣列之外。

使用 SUPER 類型資料的考量事項

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

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