diff --git a/docs/en/docs/data-operate/import/import-way/load-json-format.md b/docs/en/docs/data-operate/import/import-way/load-json-format.md index d66845cb59..15968f2643 100644 --- a/docs/en/docs/data-operate/import/import-way/load-json-format.md +++ b/docs/en/docs/data-operate/import/import-way/load-json-format.md @@ -243,9 +243,9 @@ In import statement 1, only JSON Path is specified, and Columns is not specified ````text +------+------+ -| k1 | k2 | +| k1 | k2 | +------+------+ -| 2 | 1 | +| 2 | 1 | +------+------+ ```` @@ -261,9 +261,9 @@ Compared with the import statement 1, the Columns field is added here to describ ````text +------+------+ -| k1 | k2 | +| k1 | k2 | +------+------+ -| 1 | 2 | +| 1 | 2 | +------+------+ ```` @@ -277,12 +277,68 @@ The above example will import the value of k1 multiplied by 100. The final impor ````text +------+------+ -| k1 | k2 | +| k1 | k2 | +------+------+ -| 100 | 2 | +| 100 | 2 | +------+------+ ```` +Import statement 3: + +Compared with the import statement 1 and import statement 2, the columns field `k1_copy` is added here. +Table Structure: + +``` +k2 int, k1 int, k1_copy int +``` + +If you want to assign a column field in JSON to several column fields in the table multiple times, you can specify the column multiple times in jsonPaths and specify the mapping order in sequence. An example is as follows: + +```bash +curl -v --location-trusted -u root: -H "format: json" -H "jsonpaths: [\"$.k2\", \"$.k1\", \"$.k1\"]" -H "columns: k2,k1,k1_copy" -T example.json http://127.0.0.1:8030/api/db1/tbl1/_stream_load +``` + +The above example will extract the fields in the order specified by the JSON Path. It designates the first column as the value for the `k2` column in the table, the second column as the value for the `k1` column, and the third column as the value for the `k1_copy` column. The final imported data result is as follows: + +```text ++------+------+---------+ +| k2 | k1 | k2_copy | ++------+------+---------+ +| 2 | 1 | 2 | ++------+------+---------+ +``` + +Import statement 4: + +Data content: + +```json +{"k1" : 1, "k2": 2, "k3": {"k1" : 31, "k1_nested" : {"k1" : 32} } } +``` + +Compared with the import statement 1 and import statement 2, the columns field `k1_nested1` and `k1_nested2` are added here. + +Table Structure: + +``` +k2 int, k1 int, k1_nested1 int, k1_nested2 int +``` +If you want to assign multi-level fields with the same name nested in json to different columns in the table, you can specify the column in jsonPaths and specify the mapping order in turn. An example are as follows: + +```bash +curl -v --location-trusted -u root: -H "format: json" -H "jsonpaths: [\"$.k2\", \"$.k1\",\"$.k3.k1\",\"$.k3.k1_nested.k1\" -H "columns: k2,k1,k1_nested1,k1_nested2" -T example.json http://127.0.0.1:8030/api/db1/tbl1/_stream_load +``` + +The above example will extract the fields in the order of the JSON Path, specifying that the first column is the value of the `k2` column in the table, the second column is the value of the `k1` column in the table, and the third column is the `k1` column in the nested type. The value of the `k1_nested1` column, from which we know that the `k3.k1_nested.k1` column is the value of the `k1_nested2` column in the table. The final imported data results are as follows: + +```text ++------+------+------------+------------+ +| k2 | k1 | k1_nested1 | k1_nested2 | ++------+------+------------+------------+ +| 2 | 1 | 31 | 32 | ++------+------+------------+------------+ +``` + ## JSON root Doris supports extracting data specified in JSON through JSON root. @@ -340,13 +396,13 @@ The import results that users may expect are as follows, that is, for missing co ````text +------+------+ -| k1 | k2 | +| k1 | k2 | +------+------+ -| 1 | a | +| 1 | a | +------+------+ -| 2 | x | +| 2 | x | +------+------+ -|3|c| +|3 |c | +------+------+ ```` @@ -354,13 +410,13 @@ But the actual import result is as follows, that is, for the missing column, NUL ````text +------+------+ -| k1 | k2 | +| k1 | k2 | +------+------+ -| 1 | a | +| 1 | a | +------+------+ -| 2 | NULL | +| 2 | NULL | +------+------+ -|3|c| +|3 |c | +------+------+ ```` diff --git a/docs/zh-CN/docs/data-operate/import/import-way/load-json-format.md b/docs/zh-CN/docs/data-operate/import/import-way/load-json-format.md index f0e35f7340..82bb9a895b 100644 --- a/docs/zh-CN/docs/data-operate/import/import-way/load-json-format.md +++ b/docs/zh-CN/docs/data-operate/import/import-way/load-json-format.md @@ -284,6 +284,61 @@ curl -v --location-trusted -u root: -H "format: json" -H "jsonpaths: [\"$.k2\", +------+------+ ``` +导入语句3: + +相比于导入语句1和导入语句2的表结构,这里增加`k1_copy`列。 +表结构: + +``` +k2 int, k1 int, k1_copy int +``` +如果你想将json中的某一字段多次赋予给表中几列,那么可以在jsonPaths中多次指定该列,并且依次指定映射顺序。示例如下: + +```bash +curl -v --location-trusted -u root: -H "format: json" -H "jsonpaths: [\"$.k2\", \"$.k1\", \"$.k1\"]" -H "columns: k2,k1,k1_copy" -T example.json http://127.0.0.1:8030/api/db1/tbl1/_stream_load +``` + +上述示例会按 JSON Path 中字段的顺序抽取后,指定第一列为表中 k2 列的值,而第二列为表中 k1 列的值,第二列为表中 k1_copy 列的值。最终导入的数据结果如下: + +```text ++------+------+---------+ +| k2 | k1 | k2_copy | ++------+------+---------+ +| 2 | 1 | 2 | ++------+------+---------+ +``` + +导入语句4: + +数据内容: + +```json +{"k1" : 1, "k2": 2, "k3": {"k1" : 31, "k1_nested" : {"k1" : 32} } } +``` + +相比于导入语句1和导入语句2的表结构,这里增加`k1_nested1`,`k1_nested2`列。 +表结构: + +``` +k2 int, k1 int, k1_nested1 int, k1_nested2 int +``` +如果你想将json中嵌套的多级同名字段赋予给表中不同的列,那么可以在jsonPaths中指定该列,并且依次指定映射顺序。示例如下: + +```bash +curl -v --location-trusted -u root: -H "format: json" -H "jsonpaths: [\"$.k2\", \"$.k1\",\"$.k3.k1\",\"$.k3.k1_nested.k1\" -H "columns: k2,k1,k1_nested1,k1_nested2" -T example.json http://127.0.0.1:8030/api/db1/tbl1/_stream_load +``` + +上述示例会按 JSON Path 中字段的顺序抽取后,指定第一列为表中 k2 列的值,而第二列为表中 k1 列的值,第三列嵌套类型中的 k1 列为表中 k1_nested1 列的值,由此可知 k3.k1_nested.k1 列为表中 k1_nested2列的值。 最终导入的数据结果如下: + +```text ++------+------+------------+------------+ +| k2 | k1 | k1_nested1 | k1_nested2 | ++------+------+------------+------------+ +| 2 | 1 | 31 | 32 | ++------+------+------------+------------+ +``` + + ## JSON root Doris 支持通过 JSON root 抽取 JSON 中指定的数据。