テーブル参照 (table reference)
適用対象: Databricks SQL Databricks Runtime
テーブル参照は、SQL 内の中間結果テーブルです。 関数、結合、サブクエリなどの他の演算子から "派生" したり、ベース テーブルを直接参照したり、インライン テーブルとして構築したりできます。
構文
table_reference
{ table_name [ TABLESAMPLE clause ] [ table_alias ] |
{ STREAM table_name [ table_alias ] | STREAM ( table_name ) [ table_alias ] } |
view_name [ table_alias ] |
JOIN clause |
PIVOT clause |
UNPIVOT clause |
[ STREAM ] table_valued_function [ table_alias ] |
[ LATERAL ] table_valued_function [ table_alias ] |
VALUES clause |
[ LATERAL ] ( query ) [ TABLESAMPLE clause ] [ table_alias ] }
パラメーター
-
テンポラル仕様を含む可能性のあるテーブルを識別します。 詳細については、「Delta Lake テーブル履歴の処理」を参照してください。
テーブルが見つからない場合、Azure Databricks で TABLE_OR_VIEW_NOT_FOUND エラーが発生します。
名前解決の詳細については、「列、フィールド、パラメーター、変数の解決」を参照してください。
-
ビューまたは共通テーブル式 (CTE) を識別します。 ビューが見つからない場合、Azure Databricks では TABLE_OR_VIEW_NOT_FOUND エラーが生じます。
名前解決の詳細については、「列、フィールド、パラメーター、変数の解決」を参照してください。
STREAM
ストリーミング ソースとしてテーブルまたはテーブル値関数を返します。
STREAM
キーワードと共に使用する場合、テーブルにテンポラル仕様を指定することはできません。 ストリーミング ソースは、ストリーミング テーブルの定義で最もよく使用されています。-
結合を使用して 2 つ以上の関係を結合します。
-
適用対象: Databricks SQL Databricks Runtime 12.2 LTS 以上。
データの観点に使用されます。特定の列の値に基づいて集計値を取得できます。
Databricks Runtime 12.0 より前では、PIVOT は、
FROM
句の後の SELECT に制限されます。 -
適用対象: Databricks SQL Databricks Runtime 12.2 LTS 以上。
データ パースペクティブに使用されます。複数の列グループを行に分割できます。
[LATERAL] table_valued_function_invocation
テーブル値関数を呼び出します。 同じ
FROM
句の先行するtable_reference
によって公開されている列を参照するには、LATERAL
を指定する必要があります。-
インライン テーブルを定義します。
[LATERAL] ( query )
クエリを使用してテーブル参照を計算します。
LATERAL
で始まるクエリは、同じFROM
句の先行するtable_reference
によって公開されている列を参照することがあります。 このようなコンストラクトは、相関クエリまたは依存クエリと呼ばれます。-
必要に応じて、行の一部のみをサンプリングすることで、結果セットのサイズを小さくしてください。
-
必要に応じて
table_reference
のラベルを指定します。table_alias
にcolumn_identifier
が含まれる場合、それらの数はtable_reference
の列の数と一致する必要があります。
Delta テーブルでの選択
標準の SELECT
オプションに加えて、Delta テーブルでは、このセクションで説明するタイム トラベル オプションがサポートされています。 詳細については、「Delta Lake テーブル履歴を操作する」を参照してください。
AS OF
の構文
table_identifier TIMESTAMP AS OF timestamp_expression
table_identifier VERSION AS OF version
timestamp_expression
には次のいずれかを指定できます。'2018-10-18T22:15:12.013Z'
、つまり、タイムスタンプにキャストできる文字列ですcast('2018-10-18 13:36:32 CEST' as timestamp)
'2018-10-18'
、つまり、日付文字列ですcurrent_timestamp() - interval 12 hours
date_sub(current_date(), 1)
- タイムスタンプにキャストされる (できる) その他の式
version
は、DESCRIBE HISTORY table_spec
の出力から取得できる long 型の値です。
timestamp_expression
も version
もサブクエリにすることはできません。
例
> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'
> SELECT * FROM events VERSION AS OF 123
@
構文
タイムスタンプまたはバージョンを指定するには、@
構文を使用します。 タイムスタンプは yyyyMMddHHmmssSSS
形式である必要があります。 バージョンの前に v
を付加することで、@
の後にバージョンを指定できます。 たとえば、テーブル events
のバージョン 123
を照会するには、events@v123
を指定します。
例
> SELECT * FROM events@20190101000000000
> SELECT * FROM events@v123
例
-- select all referencable columns from all tables
> SELECT * FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
1 2 3 4
-- select all referencable columns from one table
> SELECT t2.* FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
3 4
-- select all referencable columns from all tables except t2.c4
> SELECT * EXCEPT(c4) FROM VALUES(1, 2) AS t1(c1, c2), VALUES(3, 4) AS t2(c3, c4);
1 2 3
-- select all referencable columns from a table, except a nested field.
> SELECT * EXCEPT(c2.b) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
1 { "a" : 2 }
-- Removing all fields results in an empty struct
> SELECT * EXCEPT(c2.b, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
1 { }
-- Overlapping names result in an error
> SELECT * EXCEPT(c2, c2.a) FROM VALUES(1, named_struct('a', 2, 'b', 3)) AS t(c1, c2);
Error: EXCEPT_OVERLAPPING_COLUMNS