from_json
函式
適用於:Databricks SQL Databricks Runtime
傳回結構值為 jsonStr
和 schema
的字串。
語法
from_json(jsonStr, schema [, options])
引數
-
jsonStr
STRING
:指定 json 文件的運算式。 -
schema
STRING
:schema_of_json函式的表達式或調用。 -
options
:指定指示詞的選擇性常MAP<STRING,STRING>
值。
jsonStr
應該在和schema
方面options
形成良好的格式。
schema
必須定義為逗號分隔 column 名稱和數據類型組,類似於 CREATE TABLE
中使用的格式。
在 Databricks Runtime 12.2 schema
之前必須是常值。
注意
column 和 schema
中的欄位名稱對大小寫敏感,且必須與 jsonStr
中的名稱完全一致。
若要對應唯有不同情況的 JSON 字段,您可以將 產生的結構轉換成 不同的功能變數名稱。
如需詳細資訊,請參閱 範例 。
options
如果提供,可以是下列任一項:
-
primitivesAsString
(預設false
):將所有基本 values 推斷為字串類型。 -
prefersDecimal
(預設false
):將所有浮點 values 推斷為十進位類型。 如果 values 不適合以小數表示,則會將其視為雙精度浮點數。 -
allowComments
(預設值false
):忽略 JSON 記錄中的 Java 和C++樣式批注。 -
allowUnquotedFieldNames
(預設值false
):允許未加上批注的 JSON 功能變數名稱。 -
allowSingleQuotes
(預設值true
):除了雙引號之外,還允許單引號。 -
allowNumericLeadingZeros
(預設值false
):允許數位中的前置零(例如,00012
)。 -
allowBackslashEscapingAnyCharacter
(預設值false
):允許使用反斜杠引號機制接受所有字元的引號。 -
allowUnquotedControlChars
(預設值false
):允許 JSON 字串包含未加上引號的控制字元(值為小於 32 的 ASCII 字元,包括製表元和行摘要字元)。 -
mode
(預設值PERMISSIVE
):允許在剖析期間處理損毀記錄的模式。-
PERMISSIVE
:當它符合損毀的記錄時,會將格式錯誤的字串放入 所設定columnNameOfCorruptRecord
的欄位中,並將格式不正確的欄位設定為 null。 若要保留損毀的記錄,您可以在使用者定義的 schema中 set 名為columnNameOfCorruptRecord
的字串類型字段。 如果 schema 沒有欄位,則會在剖析期間忽略損毀的記錄。 在推斷 schema時,它會隱含地在輸出 schema中加入columnNameOfCorruptRecord
字段。 -
FAILFAST
:當它符合損毀的記錄時,會擲回例外狀況。
-
-
columnNameOfCorruptRecord
(預設值為spark.sql.columnNameOfCorruptRecord
中指定的值):允許重新命名PERMISSIVE
模式所建立格式錯誤的字串 having 新的字段。 這會覆寫spark.sql.columnNameOfCorruptRecord
。 -
dateFormat
(預設值yyyy-MM-dd
):設定表示日期格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於日期類型。 -
timestampFormat
(預設值yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
):設定表示時間戳格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於時間戳類型。 -
multiLine
(預設值false
):剖析一筆記錄,每個檔案可能會跨越多行。 -
encoding
(預設不會 set):允許強制 set JSON 檔案的標準基本或延伸編碼之一。 例如UTF-16BE、UTF-32LE。 如果未指定編碼,且multiLine
的值在 set 到true
之間,則會自動偵測到。 -
lineSep
(預設值涵蓋所有\r
,\r\n
和\n
):定義應該用於剖析的行分隔符。 -
samplingRatio
(預設值 1.0):定義用於 schema 推斷的輸入 JSON 物件分數。 -
dropFieldIfAllNull
(預設false
):是否在schema推斷期間忽略所有null column或空陣列/結構的values。 -
locale
(預設值為en-US
):sets
地區設定為 IETF BCP 47 格式的語言標記。 例如,這是在剖析日期和時間戳時使用。 -
allowNonNumericNumbers
(預設true
):允許 JSON 剖析器將非數位 (NaN
) 令牌的 set 辨識為合法的浮點數 values:-
+INF
表示正無限,以及和+Infinity
的Infinity
別名。 -
-INF
若為負無限,則為 別名-Infinity
。 -
NaN
對於其他非數位,例如除以零的結果。
-
-
readerCaseSensitive
(預設值true
): 指定啟用時rescuedDataColumn
區分大小寫的行為。 如果為 true,拯救其名稱大小寫與 schema不同的 columns 的數據;否則,以不區分大小寫的方式讀取數據。 適用於 Databricks SQL 和 Databricks Runtime 13.3 LTS 和更新版本。
傳回
結構體,具有符合 schema 定義的欄位名稱和型別。
範例
> SELECT from_json('{"a":1, "b":0.8}', 'a INT, b DOUBLE');
{"a":1,"b":0.8}
-- The column name must to match the case of the JSON field
> SELECT from_json('{"a":1}', 'A INT');
{"A":null}
> SELECT from_json('{"datetime":"26/08/2015"}', 'datetime Timestamp', map('timestampFormat', 'dd/MM/yyyy'));
{"datetime":2015-08-26 00:00:00}
-- Disambiguate field names with different cases
> SELECT cast(from_json('{"a":1, "A":0.8}', 'a INT, A DOUBLE') AS STRUCT<a: INT, b: DOUBLE>);
{"a":1, "b":0.8}