次の方法で共有


from_json 関数

適用対象: 「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

jsonStrschema を含む構造体の値を返します。

構文

from_json(jsonStr, schema [, options])

引数

jsonStr は、schema および options に関して適切な形式である必要があります。

schema は、 CREATE TABLEで使用される形式と同様に、コンマ区切りの列名とデータ型のペアとして定義する必要があります。 Databricks Runtime 12.2 より前では、schema はリテラルである必要があります。

Note

schemaの列名とフィールド名は大文字と小文字が区別され、jsonStrの名前と正確に一致する必要があります。 大文字と小文字のみが異なる JSON フィールドをマップするには、結果の構造体を個別のフィールド名にキャストできます。 詳細については、 Examples を参照してください。

options は、指定する場合は、次のいずれかを指定できます。

  • primitivesAsString (既定値は false): すべてのプリミティブ値を文字列型として推論します。
  • prefersDecimal (既定値は false): すべての浮動小数点値を 10 進型として推論します。 値が 10 進に合わない場合は、倍精度浮動小数点として推論します。
  • 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 パターンの形式に従います。 これは、date 型に適用されます。
  • timestampFormat (既定値は yyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]): timestamp 形式を示す文字列を設定します。 カスタム日付形式は Datetime パターンの形式に従います。 これは、timestamp 型に適用されます。
  • multiLine (既定値は false): 1 つのレコードを解析します。これはファイルで複数の行にまたがる場合があります。
  • encoding (既定では設定されていません): JSON ファイルに対して標準、基本、または拡張エンコードのいずれかを強制的に設定できます。 たとえば、UTF-16BE、UTF-32LE などです。 エンコードが指定されておらず、multiLinetrue に設定されている場合は、自動的に検出されます。
  • lineSep (既定値には \r\r\n\n のすべてが含まれる): 解析に使用する行区切り記号を定義します。
  • samplingRatio (既定値は 1.0): スキーマの推論に使用される入力 JSON オブジェクトの割合を定義します。
  • dropFieldIfAllNull (既定値は false): スキーマの推論中に、null 値のみの列、または空の配列や構造体を無視するかどうか。
  • locale (既定値は en-US): sets IETF BCP 47 形式の言語タグとしてロケールを設定します。 たとえば、日付とタイムスタンプの解析中に使用されます。
  • allowNonNumericNumbers (既定値は true): JSON パーサーが一連の非数値 (NaN) トークンを有効な浮動小数点数値として認識することを許可します。
    • +INF: 正の無限大。また、+InfinityInfinity の別名。
    • -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}