SELECT

적용 대상:check marked yes Databricks SQL check marked yes Databricks 런타임

하나 이상의 테이블 참조에서 결과 집합을 작성합니다. 이 SELECT 절은 CTE(공용 테이블 식), set 연산 및 기타 다양한 절도 포함하는 쿼리의 일부일 수 있습니다.

구문

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 } [, ...] )

매개 변수

  • 힌트

    힌트는 Azure Databricks 최적화 프로그램이 더 나은 계획 결정을 내리는 데 도움이 됩니다. Azure Databricks는 조인 전략 선택 및 데이터 다시 분할에 영향을 주는 힌트를 지원합니다.

  • ALL

    테이블 참조에서 일치하는 모든 행을 선택합니다. 기본적으로 사용하도록 설정되어 있습니다.

  • DISTINCT

    결과에서 중복 항목을 제거한 후 테이블 참조에서 일치하는 모든 행을 선택합니다.

  • named_expression

    선택적으로 할당된 이름을 가진 식입니다.

    • expression

      값으로 평가되는 하나 이상의 값, 연산자 및 SQL 함수의 조합입니다.

    • column_alias

      식 결과의 이름을 지정하는 선택적 열 식별자입니다. column_alias가 제공되지 않으면 Databricks SQL이 파생됩니다.

  • star_clause

    절의 모든 참조 가능한 열 또는 절의 FROM 특정 테이블 참조 열 또는 필드 FROM 이름을 지정하는 약식입니다.

  • table_reference

    SELECT에 대한 입력 소스입니다. 이 입력 참조는 참조 전에 키워드(keyword) 사용하여 STREAM 스트리밍 참조로 전환할 수 있습니다.

  • LATERAL VIEW

    하나 이상의 행을 포함하는 가상 테이블을 생성하는 EXPLODE 등의 생성기 함수와 함께 사용합니다. LATERAL VIEW는 행을 원래 출력 행 각각에 적용합니다.

    Databricks SQL에서 Databricks Runtime 12.2부터 이 절은 더 이상 사용되지 않습니다. 테이블 반환 생성기 함수 를 table_reference 호출해야 합니다.

  • WHERE

    제공된 조건자를 기반으로 FROM 절의 결과를 필터링합니다.

  • GROUP BY

    행을 그룹화하는 데 사용되는 식입니다. 이는 집계 함수(MIN, MAX, COUNT, SUM, AVG)와 함께 사용되어 각 그룹의 그룹화 식 및 집계 값을 기반으로 행을 그룹화합니다. FILTER 절이 집계 함수에 연결되면 일치하는 행만 해당 함수에 전달됩니다.

  • HAVING

    GROUP BY에 의해 생성된 행이 필터링되는 조건자입니다. HAVING 절은 그룹화가 수행된 후 행을 필터링하는 데 사용됩니다. GROUP BY 없이 HAVING를 지정하면 그룹화 식(전역 집계)이 없는 GROUP BY를 나타냅니다.

  • QUALIFY

    창 함수의 결과를 필터링하는 데 사용되는 조건자입니다. QUALIFY를 사용하려면 SELECT 목록 또는 QUALIFY 절에 하나 이상의 창 함수가 있어야 합니다.

Delta 테이블에서 선택

Delta 테이블은 표준 SELECT 옵션 외에도 이 섹션에 설명된 시간 이동 옵션을 지원합니다. 자세한 내용은 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)
    • 타임스탬프이거나 타임스탬프로 캐스팅될 수 있는 기타 식
  • versionDESCRIBE HISTORY table_spec 출력에서 가져올 수 있는 긴 값입니다.

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