次の方法で共有


SELECT (サブセレクト)

適用対象:「はい」のチェック マーク Databricks SQL 「はい」のチェック マーク Databricks Runtime

1 つ以上のテーブル参照から結果セットを作成します。 SELECT 句は、共通テーブル式 (CTE)、セット操作、およびその他のさまざまな句をさらに含むクエリの一部にすることができます。

構文

  SELECT clause
  FROM table_reference [, ...]
  [ LATERAL VIEW clause ]
  [ WHERE clause ]
  [ GROUP BY clause ]
  [ HAVING clause]
  [ QUALIFY clause ]

named_expression
   expression [ column_alias ]

star_clause
   [ { table_name | view_name } . ] * [ except_clause ]

except_clause
   EXCEPT ( { column_name | field_name } [, ...] )

パラメーター

  • SELECT 条項

    式、集計、重複除去の実行など、サブクエリから返される列を収集します。

  • table_reference

    SELECT の入力のソース。 この入力参照は、参照の前に STREAM キーワードを使用してストリーミング参照に変換できます。

  • LATERAL VIEW

    1 つ以上の行を含む仮想テーブルを生成する、EXPLODE などのジェネレーター関数と組み合わせて使用されます。 LATERAL VIEW では行は元の各出力行に適用されます。

    Databricks SQL と Databricks Runtime 12.2 以降では、この句は非推奨になっています。 テーブル値ジェネレーター関数は、table_reference として呼び出す必要があります。

  • WHERE

    指定された述語に基づいて FROM 句の結果をフィルター処理します。

  • GROUP BY

    行をグループ化するために使用される式。 これは、集計関数 (MINMAXCOUNTSUMAVG) と共に使用して、グループ化式に基づいて行をグループ化し、各グループの値を集計します。 FILTER 句が集計関数に関連付けられている場合は、一致する行だけがその関数に渡されます。

  • HAVING

    GROUP BY によって生成される行のフィルター処理に使用する述語。 HAVING 句は、グループ化が実行された後に行をフィルター処理するために使用されます。 HAVING を指定せずに GROUP BY を指定すると、グループ化式のない GROUP BY (グローバル集計) を示します。

  • QUALIFY

    ウィンドウ関数の結果をフィルター処理するために使用される述語。 QUALIFYを使用するには、SELECT リストまたは QUALIFY 句に少なくとも 1 つの ウィンドウ関数 が存在する必要があります。

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 events VERSION AS OF 123

@ の構文

タイムスタンプまたはバージョンを指定するには、@ 構文を使用します。 タイムスタンプは yyyyMMddHHmmssSSS 形式である必要があります。 バージョンの前に @ を付加することで、v の後にバージョンを指定できます。 たとえば、テーブル 123 のバージョン events を照会するには、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