以下の構造の JSON ファイルがあります。
{
"A": {
"AId": {
"AId": "123",
"idType": "XYZ"
},
"fN": "RfN",
"oN": "ON",
"mail": [
"abc@kml.com",
"xyz@kml.com"
],
"ph": [
{
"nu": "999-999-9999",
"t": "Of",
"ext": "1234"
},
{
"nu": "999-999-9999",
"t": "Of",
"ext": "1234"
}
],
"add": {
"addLines": [
"Addr Line 1",
"Addr Line 2"
],
"c": "C",
"sC": "S"
},
"c": [
{
"cT": "CT",
"cN": "9999"
}
],
"serId": "XXX"
},
"int": {
"endTS": null,
"cId": {
"cId": "null",
"cC": "null"
},
"cmpgn": null,
"sTC": null,
"cCID": {
"tIC": "null",
"tC": "null",
"cC": []
},
"int": "Un",
"rep": [],
"pp": "null",
"cf": {
"a": 1234,
"b": 1234
},
"iA": {
"sId": {
"s": "null",
"sId": "null"
},
"cId": "null",
"lId": "null"
},
"sRequest": null,
"vBu": "VBU",
"fId": "FId",
"k": [
"k"
],
"eng": [
{
"EC": "E_CODE::12345",
"cT": "2011-01-28T23:12:12.666Z",
"up": null,
"rep": {
"rep": {
"type": "B",
"id": "ID"
},
"fullName": "FullName"
}
}
]
}
}
いくつかのポイント:
上記の構造からハイブ スキーマを作成する必要があります。
JSON 構造は動的に変更できます。JSON 構造の変更ごとに。ハイブ スキーマを再生成する必要があります。
PythonのJSONライブラリを使ってみました。しかし、あまり役に立ちません。ハイブスキーマのフィールド名として使用できるタグ名を取得できませんでした。
JSON を Hive スキーマに生成するプロセスを自動化したい。
Python JSON Encoder、Decoder クラスの探索。JSON を解析し、そこから Hive スキーマを作成するための独自のロジックを配置します。しかし、JSON Encoder、Decoder クラスを使用できる良い例はありません。
最後に、すべてを Python UDF の形式にします。私は Java UDF の代替手段にも適しています。
注: 上記の JSON は、http://jsonlint.com/を使用して構造化できます。