テーブル参照 (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 ] }

パラメーター

  • table_name

    テンポラル仕様を含む可能性のあるテーブルを識別します。 詳細については、「Delta Lake テーブル履歴の処理」を参照してください。

    テーブルが見つからない場合、Azure Databricks で TABLE_OR_VIEW_NOT_FOUND エラーが発生します。

    名前解決の詳細については、「列、フィールド、パラメーター、変数の解決」を参照してください。

  • view_name

    ビューまたは共通テーブル式 (CTE) を識別します。 ビューが見つからない場合、Azure Databricks では TABLE_OR_VIEW_NOT_FOUND エラーが生じます。

    名前解決の詳細については、「列、フィールド、パラメーター、変数の解決」を参照してください。

  • STREAM

    ストリーミング ソースとしてテーブルまたはテーブル値関数を返します。 STREAM キーワードと共に使用する場合、テーブルにテンポラル仕様を指定することはできません。 ストリーミング ソースは、ストリーミング テーブルの定義で最もよく使用されています。

  • JOIN

    結合を使用して 2 つ以上の関係を結合します。

  • PIVOT

    適用対象:check marked yes Databricks SQL 「はい」のチェック マーク Databricks Runtime 12.2 LTS 以降。

    データの観点に使用されます。特定の列の値に基づいて集計値を取得できます。

    Databricks Runtime 12.0 より前では、PIVOT は、FROM 句の後の SELECT に制限されます。

  • UNPIVOT

    適用対象:check marked yes Databricks SQL 「はい」のチェック マーク Databricks Runtime 12.2 LTS 以降。

    データ パースペクティブに使用されます。複数の列グループを行に分割できます。

  • [LATERAL]table_valued_function_invocation

    テーブル値関数を呼び出します。 同じ FROM 句の先行する table_reference によって公開されている列を参照するには、LATERAL を指定する必要があります。

  • VALUES

    インライン テーブルを定義します。

  • [LATERAL] ( query )

    クエリを使用してテーブル参照を計算します。 LATERAL で始まるクエリは、同じ FROM 句の先行する table_reference によって公開されている列を参照することがあります。 このようなコンストラクトは、相関クエリまたは依存クエリと呼ばれます。

  • TABLESAMPLE

    必要に応じて、行の一部のみをサンプリングすることで、結果セットのサイズを小さくしてください。

  • table_alias

    必要に応じて table_reference のラベルを指定します。 table_aliascolumn_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_expressionversion もサブクエリにすることはできません。

> SELECT * FROM events TIMESTAMP AS OF '2018-10-18T22:15:12.013Z'

> SELECT * FROM delta.`/mnt/delta/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