例: 曖昧なJSONエンティティ参照 - Teradata Database - Teradata Vantage NewSQL Engine - JSONエンティティ参照使用の曖昧なケースを示す例。

Teradata Vantage™ JSONデータ型

Product
Teradata Database
Teradata Vantage NewSQL Engine
Release Number
16.20
Published
2019年3月
Language
日本語
Last Update
2019-10-29
dita:mapPath
ja-JP/bgi1512081870828.ditamap
dita:ditavalPath
ja-JP/bgi1512081870828.ditaval
dita:id
evi1472243742653
Product Category
Software
Teradata Vantage

次のクエリーでは、T.jsonColT.idは列参照として解釈されます。
SELECT T.id, T.jsonCol
FROM test.jsonTable T
WHERE id < 3
ORDER BY 1;
結果:
id     jsonCol
--------------
1      {"name" : "Cameron", "numbers" : [1,2,3,[1,2]]}
2      {"name" : "Cameron", "name" : "Lewis"}

次のクエリーでは、jsonCol.nameはJSONエンティティ参照として解釈されます。
SELECT jsonCol.name
FROM test.jsonTable
WHERE id=1;
結果:
id     jsonCol.name
-------------------
1      Cameron

次のクエリーではエラーが返されます。これは、jsonColという名前のJSON列に複数のソース テーブルがあるためです。
SELECT jsonCol.name
FROM test.jsonTable, test.jsonTable2;
結果:
*** Failure 3809 Column 'jsonCol' is ambiguous.

次のクエリーは、完全修飾列参照として指定されたJSONエンティティ参照を示しています。
SELECT id, test.jsonTable.jsonCol.name
FROM test.jsonTable
WHERE id=1;
結果:
id     jsonTable.jsonCol.name
----------------------------------
1      Cameron

次に、完全修飾列参照として指定された間違ったJSONエンティティ参照を示します。
SELECT test.jsonTable.id.name
FROM test.jsonTable
WHERE id=1;
クエリーはエラーを返します。
*** Failure 3706 Syntax error: Invalid use of JSON entity reference syntax on non-JSON type.

次のクエリーでは、jsonTable.jsonCol.namedatabase.table.column参照のような外観のJSONエンティティ参照です。
SELECT id, jsonTable.jsonCol.name
FROM test.jsonTable
WHERE id=1;
結果:
id     jsonTable.jsonCol.name
-----------------------------
1      Cameron

間違った JSON エンティティ参照

SELECT jsonTable.id.name
FROM test.jsonTable
WHERE id=1;
結果:
*** Failure 3802 Database 'jsonTable' does not exist.

次のクエリーでは、jsonCol.name."first"はソース テーブルtest.jsonTablejsonCol列でエンティティ参照として解釈されます。
SELECT T.id, jsonCol.name."first"
FROM test.jsonTable T, test.jsonTable3 T3
ORDER BY T.id;
結果:
id     jsonCol.name.first
-------------------------
1      ?
2      ?
3      Cameron

次のクエリーでは、jsonColへの参照が曖昧です。これは、両方のソース テーブルにjsonColという名前のJSON列が含まれるからです。
SELECT T.id, jsonCol.name."first"
FROM test.jsonTable T, test.jsonTable2 T2
ORDER BY T.id;
クエリーはエラーを返します。
*** Failure 3809 Column 'jsonCol' is ambiguous.

この例では、jsonTable2は現在のデータベースにありjsonColと呼ばれるJSON列をともなうので、jsonTable2.jsonCol.nameはJSONエンティティ参照として解釈されます。
SELECT jsonTable2.id, jsonTable2.jsonCol.name
FROM test.jsonTable3;
結果:
id     jsonCol.name
------------------------------
1      Cameron