Ich habe eine durch Zeilenumbrüche getrennte JSON-Datei. Ist es möglich, ein Schema mit einem Tool wie zu generieren jq
? Ich hatte jq
in der Vergangenheit einige Erfolge, habe aber noch nichts so Kompliziertes getan.
Hier ist das Format des Schemas, das ich anstrebe: https://cloud.google.com/bigquery/docs/nested-repeated#example_schema . Beachten Sie, dass die Verschachtelung mit einem fields
Schlüssel des übergeordneten Elements und Arrays mit behandelt werden "mode": "repeated"
. (Jede Hilfe bei einem Schema wird sehr geschätzt und ich kann dann in dieses Format einmassieren).
Wenn ich über den obigen Link kopiere, möchte ich daraus Folgendes generieren:
{"id":"1","first_name":"John","last_name":"Doe","dob":"1968-01-22","addresses":[{"status":"current","address":"123 First Avenue","city":"Seattle","state":"WA","zip":"11111","numberOfYears":"1"},{"status":"previous","address":"456 Main Street","city":"Portland","state":"OR","zip":"22222","numberOfYears":"5"}]}
...zu...
[
{
"name": "id",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "first_name",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "last_name",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "dob",
"type": "DATE",
"mode": "NULLABLE"
},
{
"name": "addresses",
"type": "RECORD",
"mode": "REPEATED",
"fields": [
{
"name": "status",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "address",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "city",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "state",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "zip",
"type": "STRING",
"mode": "NULLABLE"
},
{
"name": "numberOfYears",
"type": "STRING",
"mode": "NULLABLE"
}
]
}
]]
(Ref BigQuery Autodetect funktioniert nicht mit inkonsistentem JSON? Dies zeigt, dass ich den BigQuery Autodetect nicht verwenden kann, da die Elemente nicht identisch sind. Ich bin ziemlich sicher, dass ich Schemas manuell zusammenführen kann, um eine Obermenge zu erstellen.)
Hier ist eine einfache rekursive Funktion, die hilfreich sein kann, wenn Sie sich entscheiden, Ihre eigene zu würfeln:
def schema:
def isdate($v): $v | test("[0-9][0-9][0-9][0-9]-[0-9][0-9]-[0-9][0-9]");
def array($k;$v): {"name":$k,"type":"RECORD",mode:"REPEATED","fields":($v[0] | schema)};
def date($k): {"name":$k,"type":"DATE", mode:"NULLABLE"};
def string($k): {"name":$k,"type":"STRING",mode:"NULLABLE"};
def item($k;$v):
$v | if type == "array" then array($k;$v)
elif type == "string" and isdate($v) then date($k)
elif type == "string" then string($k)
else empty end;
[ to_entries[] | item(.key;.value) ]
;
schema
Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.
Bei Verstößen wenden Sie sich bitte [email protected] Löschen.
Lass mich ein paar Worte sagen