適用於:
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必須定義為逗號分隔的數據行名稱和數據類型組,類似於 中使用的CREATE TABLE格式。 在 Databricks Runtime 12.2 schema 之前必須是常值。
或者,您可以使用 Lakeflow Spark 宣告式管線搭配from_json,將schema設定為 NULL 並指定schemaLocationKey。 如需範例,請參閱 在管線中使用推斷和演進結構描述from_json。
備註
schema 中的欄位名稱和字段名稱區分大小寫,必須與 jsonStr 中的名稱完全一致。
若要映射僅大小寫不同的 JSON 字段,您可以將 產生的結構轉換成 不同的欄位名稱。
如需詳細資訊,請參閱 範例 。
options,如果提供,可以是下列任一項:
-
primitivesAsString(預設false):將所有基本值推斷為字串類型。 -
prefersDecimal(預設false):將所有浮點值推斷為十進位類型。 如果值不能以小數形式表示,則會將其推斷為雙精度浮點數型別。 -
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。 若要保留損毀的記錄,您可以在使用者定義的架構中設定名為columnNameOfCorruptRecord的字串類型字段。 如果結構沒有該欄位,則會在解析期間捨棄損壞的記錄。 推斷架構時,它會隱含地在輸出架構中新增columnNameOfCorruptRecord字段。 -
FAILFAST:遇到損毀的記錄時,會引發例外狀況。
-
-
columnNameOfCorruptRecord(預設值為spark.sql.columnNameOfCorruptRecord中指定的值):允許重新命名新欄位,其格式不正確的字串是由PERMISSIVE模式所建立。 這會覆蓋spark.sql.columnNameOfCorruptRecord。 -
dateFormat(預設值yyyy-MM-dd):設定表示日期格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於日期類型。 -
timestampFormat(預設值yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]):設定表示時間戳格式的字串。 自訂日期格式會遵循 Datetime 模式的格式。 這適用於時間戳類型。 -
multiLine(預設值false):剖析一筆記錄,每個檔案可能會跨越多行。 -
encoding(預設未設定):允許強制設定 JSON 檔案的標準基本或擴充編碼方式之一。 例如UTF-16BE、UTF-32LE。 如果未指定編碼,且multiLine設定為true,則會自動偵測。 -
lineSep(預設值涵蓋所有\r,\r\n和\n):定義應該用於剖析的行分隔符。 -
samplingRatio(預設值 1.0):定義用於架構推斷的輸入 JSON 物件分數。 -
dropFieldIfAllNull(預設false):在架構推斷期間,是否忽略全部為 Null 值的欄位或是空的陣列/結構。 -
locale(預設值為en-US):sets地區設定為 IETF BCP 47 格式的語言標記。 例如,這用於剖析日期和時間戳時。 -
allowNonNumericNumbers(預設true):允許 JSON 剖析器將一組非數值標記NaN辨識為合法的浮點數:-
+INF表示正無限大,並且同時是+Infinity和Infinity的別名。 -
-INF若為負無限,則為 別名-Infinity。 -
NaN對於其他非數位,例如除以零的結果。
-
-
readerCaseSensitive(預設值true): 指定啟用時rescuedDataColumn區分大小寫的行為。 如果為 true,則修復名稱因大小寫不同而與架構不匹配的資料行;否則,請不區分大小寫地讀取資料。 適用於 Databricks SQL 和 Databricks Runtime 13.3 LTS 和更新版本。
退貨
結構體,其字段名稱和類型符合架構定義。
範例
> 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}