from_json
-Funktion
Gilt für: Databricks SQL Databricks Runtime
Gibt einen Strukturwert mit jsonStr
und schema
zurück.
Syntax
from_json(jsonStr, schema [, options])
Argumente
jsonStr
: EinSTRING
Ausdruck, der ein JSON-Dokument angibt.schema
: EinSTRING
Ausdruck oder Aufruf schema_of_json Funktion.options
: Ein optionalesMAP<STRING,STRING>
-Literal, das Anweisungen angibt.
jsonStr
sollte in Bezug auf schema
und options
wohlgeformt sein.
schema
muss als durch Trennzeichen getrennte Spaltennamen und Datentyppaare definiert werden, ähnlich wie das in CREATE TABLE
.
Vor Databricks Runtime 12.2 muss schema
ein Literal sein.
Hinweis
Bei den Spalten- und Feldnamen schema
wird die Groß-/Kleinschreibung beachtet und muss genau mit den Namen jsonStr
übereinstimmen.
Um JSON-Felder zuzuordnen, die sich nur im Fall unterscheiden, können Sie die resultierende Struktur in unterschiedliche Feldnamen umwandeln .
Weitere Informationen finden Sie in den Beispielen .
options
kann Folgendes sein (sofern angegeben):
primitivesAsString
(Standardwertfalse
): Hiermit werden alle primitiven Werte als Zeichenfolgentyp abgeleitet.prefersDecimal
(Standardwertfalse
): Hiermit werden alle Gleitkommawerte als Dezimaltyp abgeleitet. Wenn die Werte nicht in decimal-Werten angegeben werden können, werden sie als double-Werte abgeleitet.allowComments
(Standardwertfalse
): Hiermit werden Kommentare im Java- und C++-Stil in JSON-Datensätzen ignoriert.allowUnquotedFieldNames
(Standardwertfalse
): Hiermit werden JSON-Feldnamen ohne Anführungszeichen zugelassen.allowSingleQuotes
(Standardwerttrue
): Hiermit werden neben doppelten auch einfache Anführungszeichen zugelassen.allowNumericLeadingZeros
(Standardwertfalse
): Hiermit werden führende Nullen in Zahlen zugelassen (z. B.00012
).allowBackslashEscapingAnyCharacter
(Standardwertfalse
): Hiermit wird zugelassen, dass alle Zeichen mit umgekehrten Schrägstrichen als Escapezeichen in umgekehrte Schrägstriche eingeschlossen werden können.allowUnquotedControlChars
(Standardwertfalse
): Hiermit wird festgelegt, ob JSON-Zeichenfolgen Steuerzeichen ohne Anführungszeichen (ASCII-Zeichen mit einem Wert kleiner als 32, einschließlich Tabstopp- und Zeilenvorschubzeichen) enthalten dürfen.mode
(Standardwert istPERMISSIVE
): Hiermit wird die Behandlung von beschädigten Datensätzen bei der Analyse festgelegt.PERMISSIVE
: Wenn ein beschädigter Datensatz erkannt wird, wird die falsch formatierte Zeichenfolge in ein durchcolumnNameOfCorruptRecord
konfiguriertes Feld eingefügt, und die falsch formatierten Felder werden auf NULL festgelegt. Um beschädigte Datensätze beizubehalten, können Sie ein Zeichenfolgenfeld namenscolumnNameOfCorruptRecord
in einem benutzerdefinierten Schema festlegen. Wenn das Feld nicht im Schema vorhanden ist, werden beschädigte Datensätze bei der Analyse gelöscht. Beim Ableiten eines Schemas wird in einem Ausgabeschema implizit eincolumnNameOfCorruptRecord
-Feld hinzugefügt.FAILFAST
: Hiermit wird eine Ausnahme ausgelöst, wenn beschädigte Datensätze erkannt werden.
columnNameOfCorruptRecord
(Standardwert ist der inspark.sql.columnNameOfCorruptRecord
angegebene Wert): Hiermit wird das Umbenennen des neuen Felds mit der nicht wohlgeformten Zeichenfolge ermöglicht, das imPERMISSIVE
-Modus erstellt wurde. Dadurch wirdspark.sql.columnNameOfCorruptRecord
überschrieben.dateFormat
(Standardformatyyyy-MM-dd
): Hiermit wird die Zeichenfolge festgelegt, die ein Datumsformat angibt. Benutzerdefinierte Datumsformate folgen den Formaten im Artikel zu datetime-Mustern. Dies gilt für den date-Typ.timestampFormat
(Standardformatyyyy-MM-dd'T'HH:mm:ss[.SSS][XXX]
): Hiermit wird die Zeichenfolge festgelegt, die ein Zeitstempelformat angibt. Benutzerdefinierte Datumsformate folgen den Formaten im Artikel zu datetime-Mustern. Dies gilt für den timestamp-Typ.multiLine
(Standardwertfalse
): Hiermit wird ein Datensatz analysiert, der mehrere Zeilen pro Datei umfassen kann.encoding
(standardmäßig nicht festgelegt): Hiermit wird das Erzwingen einer grundlegenden oder erweiterten Standardcodierung für die JSON-Dateien ermöglicht, z. B. UTF-16BE, UTF-32LE. Wenn keine Codierung angegeben undmultiLine
auftrue
festgelegt ist, wird die Codierung automatisch erkannt.lineSep
(standardmäßig alle\r
,\r\n
und\n
): Hiermit wird das Zeilentrennzeichen definiert, das für die Analyse verwendet werden soll.samplingRatio
(Standardwert 1.0): Hiermit wird der Anteil der JSON-Eingabeobjekte definiert, die für die Schemaableitung verwendet werden.dropFieldIfAllNull
(Standardwertfalse
): Hiermit wird festgelegt, ob bei der Schemaableitung Spalten ignoriert werden sollen, die nur NULL-Werte oder leere Arrays bzw. Strukturen enthalten.locale
(Standardwerten-US
):sets
Hiermit wird ein Gebietsschema als Sprachtag im IETF BCP 47-Format festgelegt, das beispielsweise beim Analysieren von Datumsangaben und Zeitstempeln verwendet wird.allowNonNumericNumbers
(Standardwerttrue
): Hiermit wird dem JSON-Parser das Erkennen vonNaN
-Token als zulässige Gleitkommawerte ermöglicht:+INF
für positiv Unendlich sowie als Alias von+Infinity
undInfinity
.-INF
für negativ Unendlich (Alias-Infinity
).NaN
für andere NaN-Werte, z. B. das Ergebnis einer Division durch 0.
readerCaseSensitive
(Standardwerttrue
): Gibt das Verhalten der Groß-/Kleinschreibung an, wennrescuedDataColumn
aktiviert ist. Bei „True“ werden die Datenspalten wiederhergestellt, deren Namen in Bezug auf Groß- und Kleinschreibung vom Schema abweichen. Andernfalls werden die Daten ohne Beachtung der Groß- und Kleinschreibung gelesen. Verfügbar in Databricks SQL und Databricks Runtime 13.3 LTS und höher
Gibt zurück
Eine Struktur mit Feldnamen und Typen, die mit der Schemadefinition übereinstimmen.
Beispiele
> 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}