[TD_SYSFNLIB.]JSON_TABLE(
ON (json_documents_retrieving_expr)
USING
ROWEXPR (row_expr_literal)
COLEXPR (column_expr_literal)
[AS] correlation_name [(column_name [,...])]
)
The conversion of JSON_TABLE has the considerations shown below:
ROW_NUMBER() is an equivalent of ordinal columns in Snowflake.
In Teradata, the second column of JSON_TABLE must be JSON type because the generated columns replace the second column, for that reason, Snowconvert assumes that the column has the right type, and uses it for the transformation.
SELECT*FROMJSON_TABLE(ON (SELECT COL1, COL2 FROM myJsonTable WHERE col1 =1)USING rowexpr('$.songs[*]')colexpr('[ {"jsonpath" : "$.name", "type" : "CHAR(20)"}, {"jsonpath" : "$.genre", "type" : "VARCHAR(20)"}]')) AS JT(ID, "Song name", Genre);
ID | Song name | Genre |
---+------------+-------+
1 | Late night | Jazz |
---+------------+-------+
1 | Wake up | Rock |
---+------------+-------+
1 | Who am I | Rock |
---+------------+-------+
1 | Raining | Blues |
Snowflake
OUT -> Teradata_02.sql
SELECT*FROM(SELECTCOL1 AS ID,rowexpr.value:name :: CHAR(20) AS"Song name",rowexpr.value:genre :: VARCHAR(20) AS GenreFROMmyJsonTable,TABLE(FLATTEN(INPUT => COL2:songs)) rowexprWHERE col1 =1) JT;
ID | Song name | Genre |
---+------------+-------+
1 | Late night | Jazz |
---+------------+-------+
1 | Wake up | Rock |
---+------------+-------+
1 | Who am I | Rock |
---+------------+-------+
1 | Raining | Blues |
Known Issues
1. The JSON path in COLEXPR can not have multiple asterisk accesses
The columns JSON path cannot have multiple lists with asterisk access, for example: $.Names[*].FullNames[*]. On the other hand, the JSON path of ROWEXP can have it.
2. JSON structure defined in the COLEXPR literal must be a valid JSON
When it is not the case the user will be warned about the JSON being badly formed.