在 Amazon Redshift 中獲取和查詢半結構化資料 - Amazon Redshift

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

在 Amazon Redshift 中獲取和查詢半結構化資料

通過使用支援半結構化資料,您可以在 Amazon Redshift 數據倉庫中接收和存儲半結構化數據。使用超級數據類型和 PartiQL 語言,Amazon Redshift 擴展了數據倉庫功能,以便與 SQL 和 NoSQL 數據源集成。通過這種方式,Amazon Redshift 可以對關係數據和半結構化存儲數據(如 JSON)進行高效分析。

Amazon Redshift 提供兩種形式的半結構化數據支持:超級數據類型和 Amazon Redshift Spectrum。

如果您需要以低延遲插入或更新小批量 JSON 數據,請使用 SUPER 數據類型。此外,當查詢需要強一致性、可預測的查詢性能、複雜的查詢支持以及易於使用不斷發展的架構和架構數據時,請使用 SUPER。

相比之下,如果您 Amazon Redshift Spectrum 數據查詢需要與其他AWS服務以及主要存放在 Amazon S3 中的資料,用於歸檔目的。

超級數據類型的使用案例

在 Amazon Redshift 中使用 SUPER 數據類型的半結構化數據支持可提供卓越的性能、靈活性和易用性。下列用例有助於演示如何在 SUPER 中使用半結構化資料支援。

快速靈活地插入 JSON 數據— Amazon Redshift 支持快速交易,可以解析 JSON 並將其存儲為超級值。插入事務的操作速度最高可達五倍於對已將 SUPER 屬性切碎到常規列的表中執行相同的插入操作速度。例如,假設傳入的 JSON 的格式為 {「a」:..,「b」:..,「c」「...,...}。您可以通過將傳入的 JSON 存儲到具有單個 SUPER 列 S 的表 TJ 中,而不是將其存儲到具有列」a'、'b'、「c」等的傳統表 TR 中,來多次提高插入性能。當 JSON 中有數百個屬性時,SUPER 數據類型的性能優勢將變得顯著。

此外,SUPER 數據類型不需要常規模式。在存儲之前,您不需要內省和清理傳入的 JSON。例如,假設傳入的 JSON 具有字符串「c」屬性,而其他具有整數「c」屬性,而沒有 SUPER 數據類型。在這種情況下,您必須分隔 c_string 和 c_int 列或清理數據。相比之下,使用 SUPER 數據類型,所有 JSON 數據都在攝入過程中存儲,而不會丟失信息。稍後,您可以使用 SQL 的 PartiQL 擴展來分析信息。

用於發現的靈活查詢— 將半結構化數據(如 JSON)存儲到 SUPER 數據值中後,您可以在不強加模式的情況下查詢它。您可以使用 PartiPartiQL 動態類型和鬆散語義來運行查詢並發現您需要的深層嵌套數據,而無需在查詢之前強加一個模式。

靈活的提取、加載、轉換 (ETL) 操作查詢到傳統的實例化視圖— 將架構性和半結構化數據存儲到 SUPER 中後,可以使用 PartiQL 實例化視圖來內省數據並將其分解到實例化視圖中。

具有切碎數據的實例化視圖是典型分析案例的性能和可用性優勢的一個很好的示例。當您對切碎數據執行分析時,Amazon Redshift 實例化視圖的列式組織可提供更好的性能。此外,需要傳統模式來獲取數據的用户和業務智能 (BI) 工具可以使用視圖(實例化或虛擬視圖)作為數據的傳統模式表示。

在 PartiQL 實例化視圖將 JSON 或 SUPER 中找到的數據提取到常規的列式實例化視圖之後,您可以查詢實例化視圖。如需 SUPER 資料類型如何使用具體化檢視的詳細資訊,請參將 SUPER 數據類型與實例化視圖結合

如需 SUPER 資料類型的詳細資訊,請參超級類型

超級數據類型使用的概念

下列內容可在下文中找到一些 Amazon Redshift Super Super 資料類型概念。

瞭解 Amazon Redshift 中的超級數據類型超級數據類型是 Amazon Redshift 數據類型,它允許存儲包含 Amazon Redshift 標量以及可能嵌套數組和結構的架構數組和結構。SUPER 數據類型可以本地存儲不同格式的半結構化數據,例如 JSON 或來自面向文檔源的數據。您可以添加一個新的 SUPER 列來存儲半結構化數據和寫入訪問 SUPER 列的查詢以及通常的標量列。如需 SUPER 資料類型的詳細資訊,請參超級類型

攝取模式 JSON 到超級— 藉助靈活的半結構超級數據類型,Amazon Redshift 可以接收並將架構 JSON 引入到超級值中。例如,亞馬遜 Redshift 可以將 JSON 值 [10.5,「第一個」] 引入到超級值 [10.5, '第一個'] 中,這是一個包含 Amazon Redshift 十進制 10.5 和 varchar「第一個」的數組。Amazon Redshift 可以使用 COPY 命令或 JSON 解析函數將 JSON 引入到超級值中,例如JSON 解析 ('[10.5,「第一個」]')。複製和json_parse默認情況下使用嚴格的解析語義攝取 JSON。您還可以使用數據庫數據本身構建包括數組和結構在內的 SUPER 值。

在攝取模式 JSON 的不規則結構時,SUPER 列不需要模式修改。例如,在分析點擊流時,您最初將具有屬性為「IP」和「時間」的 SUPER 列「單擊」結構存儲。您可以在不更改架構的情況下添加屬性「客户 ID」以獲取此類更改。

用於 SUPER 數據類型的本機格式是一種二進制格式,需要比其文本形式的 JSON 值少的空間。這樣可以在查詢時更快地提取和運行時處理 SUPER 值。

使用 PartiQL 查詢超級數據— PartiQL 是 SQL-92 的向後兼容擴展,許多AWS服務當前使用。通過使用 PartiQL,熟悉的 SQL 構造無縫地結合了對經典的表格式 SQL 數據和 SUPER 的半結構化數據的訪問。您可以執行對象和數組導航以及取消數組。PartiQL 擴展了標準 SQL 語言以聲明方式表達和處理嵌套和多值數據。

PartiQL 是 SQL 的擴展,其中 SUPERE 列的嵌套數據和架構性數據是一流的公民。PartiQL 不要求在查詢編譯期間對所有查詢表達式進行類型檢查。這種方法使包含 SUPER 數據類型的查詢表達式在查詢執行過程中能夠在訪問 SUPER 列中的實際數據類型時動態鍵入。此外,PartiQL 在鬆散模式下運行,其中類型不一致不會導致失敗,但返回 null。架構性和鬆散查詢處理的結合使得 PartiQL 非常適合提取、加載、傳輸 (ELT) 應用程序,在這些應用程序中,SQL 查詢評估攝入到 SUPERT 列中的 JSON 數據。

與 Redshift Spectrum 集成— 當通過 JSON、實木複合區和其他具有嵌套數據的格式運行 Redshift 頻譜查詢時,Amazon Redshift 支持 PartiQL 的多個方面。Redshift 頻譜僅支持具有架構的嵌套數據。例如,使用 Redshift 頻譜,您可以聲明 JSON 數據具有屬性嵌套方案示例在架構中<a:INTEGER, b:DECIMAL (5,2) >數組 < 結構 >。此屬性的模式確定數據始終包含一個數組,該數組包含一個整數一個和小數b。如果數據發生更改以包含更多屬性,則類型也會發生變化。相比之下,SUPER 數據類型不需要架構。您可以存儲具有不同屬性或類型的結構元素的數組。此外,一些值可以存儲在數組之外。

如需支援 SUPER 資料類型的函數的詳細資訊,請參以下內容:

超級資料的考量

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

  • 使用 JDBC 驅動程序 1.2.50 版、ODBC 驅動程序版本 1.4.17 或更高版本,以及 Amazon Redshift Python 驅動程序 2.0.872 或更高版本。

    有關 JDBC 驅動程序的信息,請參閲設定 JDBC 連線

    有關 ODBC 驅動程序的信息,請參閲設定 ODBC 連線

  • 查找以下主題中使用的架構示例,請訪問超級範例資料集

  • 下列主題中使用的所有 SQL 代碼示例都包含在相同的 S3 前綴下載。其中包括數據定義語言 (DDL) 和 COPY 語句,以及與 SUPER 一起工作的某些 TPC-H 修改的查詢。

    若要查看或下載 SQL 文件,請執行以下其中一項操作:

    • 下載超級教程 SQL 文件TPC-H 文件

    • 使用 Amazon S3 CLI 運行以下命令。您可以使用自己的目標路徑。

      aws s3 cp s3://redshift-downloads/semistructured/tutorialscripts/semistructured-tutorial.sql /target/path aws s3 cp s3://redshift-downloads/semistructured/tutorialscripts/super_tpch_queries.sql /target/path

如需 SUPER 配置的詳細資訊,請參超級配置