SELECT

適用対象:check marked yes Databricks SQL check marked yes Databricks Runtime

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

構文

SELECT [ hints ] [ ALL | DISTINCT ] { named_expression | star_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 } [, ...] )

パラメーター

  • hints

    ヒントを使用すると、Azure Databricks オプティマイザーでの計画上の決定をより適切に行うことができます。 Azure Databricks は、結合方法とデータのパーティション再分割の選択に影響するヒントをサポートしています。

  • ALL

    テーブル参照から一致するすべての行を選択します。 既定で有効です。

  • DISTINCT

    重複する結果を削除したら、テーブル参照から一致する行をすべて選択します。

  • named_expression

    省略可能な割り当てられた名前を持つ式。

    • expression

      1 つの値に評価される 1 つ以上の値、演算子、SQL 関数の組み合わせ。

    • column_alias

      式の結果の名前を指定する省略可能な列識別子。 column_alias が指定されていない場合、Databricks SQL から派生されます。

  • star_clause

    FROM 句内の参照可能なすべての列、または FROM 句内の特定のテーブル参照の列またはフィールドを指定する省略表現。

  • 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 句は、グループ化が実行された後に行をフィルター処理するために使用されます。 GROUP BY を指定せずに HAVING を指定すると、グループ化式のない 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 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