超級配置 - Amazon Redshift

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

超級配置

在使用 Amazon Redshift 超級數據類型和 PartiQL 時,請注意超級配置的以下注意事項。

寬鬆和嚴格的超級模式

當您查詢 SUPER 數據時,路徑表達式可能與實際的 SUPER 數據結構不匹配。如果您嘗試訪問數組的對象或元素的不存在成員,則 Amazon Redshift 將返回 NULL 值,如果您的查詢是在默認寬鬆模式下運行的。如果您在嚴格模式下運行查詢,Amazon Redshift 將返回錯誤。可以設置以下會話參數來設置鬆散模式的開啟或關閉。

以下示例使用會話參數啟用寬鬆模式。

SET navigate_super_null_on_error=ON; --default lax mode for navigation SET cast_super_null_on_error=ON; --default lax mode for casting SET parse_super_null_on_error=OFF; --default strict mode for ingestion

訪問具有大寫或混合大小寫字段名稱或屬性的 JSON 字段

如果 JSON 字段為大寫或混合大小寫,則必須將啟用情況敏感標識符配置為 TRUE,並用雙引號包裝混合字段或大寫字段。

下列範例説明如何將啟用案例敏感標識符設定為查詢資料。

SET enable_case_sensitive_identifier to TRUE; -- Accessing JSON fields with uppercase and mixed-case names SELECT json_table.data."ITEMS"."Name", json_table.data."price" FROM (SELECT json_parse('{"ITEMS":{"Name":"TV"}, "price": 345}') AS data) AS json_table; Name | price ------+------- "TV" | 345 (1 row) RESET enable_case_sensitive_identifier; -- After resetting the above configuration, the following query accessing JSON fields with uppercase and mixed-case names should return null (if in lax mode). SELECT json_table.data."ITEMS"."Name", json_table.data."price" FROM (SELECT json_parse('{"ITEMS":{"Name":"TV"}, "price": 345}') AS data) AS json_table; name | price ------+------- | 345 (1 row)

超級的解析選項

當您使用 JSON_PARSE 函數將 JSON 字符串解析為超級值時,應用某些限制:

  • 同一屬性名稱不能出現在同一個對象中,但可以出現在嵌套對象中。所以此json_parse_dedup_attributes配置選項允許 JSON_PARSE 僅保留最後一次出現的重複屬性,而不是返回錯誤。

  • 字符串值不能超過系統最大值 65535 字節的最大值。所以此json_parse_truncate_strings配置選項允許 JSON_PARSE () 自動截斷超過此限制的字符串,而不會返回錯誤。此行為僅影響字符串值,而不影響屬性名稱。

如需 JSON_PARSE 函數的詳細資訊,請參JSON_ 解析函數

下列範例示範其設定json_parse_dedup_attributes配置選項設置為返回重複屬性錯誤的默認行為。

SET json_parse_dedup_attributes=OFF; --default behavior of returning error instead of de-duplicating attributes

下列範例示範其設定json_parse_truncate_strings配置選項,用於返回超過此限制的字符串的錯誤的默認行為。

SET json_parse_truncate_strings=OFF; --default behavior of returning error instead of truncating strings