쿼리 데이터

데이터 쿼리는 Azure Databricks에서 거의 모든 데이터 기반 작업을 수행하기 위한 기본 단계입니다. 사용되는 언어 또는 도구에 관계없이 워크로드는 테이블 또는 다른 데이터 원본에 대한 쿼리를 정의한 다음 데이터에서 인사이트를 얻기 위한 작업을 수행하여 시작합니다. 이 문서에서는 다양한 Azure Databricks 제품 제품에서 쿼리를 실행하기 위한 핵심 개념 및 절차를 간략하게 설명하고 사용 사례에 맞게 조정할 수 있는 코드 예제를 포함합니다.

다음을 사용하여 대화형으로 데이터를 쿼리할 수 있습니다.

  • Notebooks
  • SQL 편집기
  • 파일 편집기
  • 대시보드

Delta Live Tables 파이프라인 또는 워크플로의 일부로 쿼리를 실행할 수도 있습니다.

Azure Databricks의 스트리밍 쿼리 개요는 스트리밍 데이터 쿼리를 참조 하세요.

Azure Databricks를 사용하여 쿼리할 수 있는 데이터는 무엇인가요?

Azure Databricks는 여러 형식 및 엔터프라이즈 시스템에서 데이터 쿼리를 지원합니다. Azure Databricks를 사용하여 쿼리하는 데이터는 Databricks 레이크하우스의 데이터와 외부 데이터의 두 가지 광범위한 범주 중 하나에 속합니다.

Databricks 레이크하우스에 있는 데이터는 무엇인가요?

Databricks Data Intelligence 플랫폼은 기본적으로 모든 데이터를 Databricks 레이크하우스에 저장합니다.

즉, 새 테이블을 만들기 위해 기본 CREATE TABLE 문을 실행할 때 Lakehouse 테이블을 만들었습니다. Lakehouse 데이터에는 다음과 같은 속성이 있습니다.

  • Delta Lake 형식으로 저장됩니다.
  • 클라우드 개체 스토리지에 저장됩니다.
  • Unity 카탈로그에 의해 관리됩니다.

Azure Databricks의 대부분의 레이크하우스 데이터는 Unity 카탈로그에 관리 테이블로 등록됩니다. 관리되는 테이블은 가장 쉬운 구문을 제공하며 대부분의 관계형 데이터베이스 관리 시스템의 다른 테이블처럼 작동합니다. 관리 테이블은 대부분의 사용 사례에 권장되며 데이터 스토리지의 구현 세부 정보에 대해 걱정하지 않으려는 모든 사용자에게 적합합니다.

관리되지 않는 테이블 또는 외부 테이블은 지정된 테이블로 등록된 테이블입니다LOCATION. 외부 델타 테이블은 여전히 레이크하우스 데이터이므로 외부라는 용어는 오해의 소지가 있을 수 있습니다. 관리되지 않는 테이블은 다른 델타 판독기 클라이언트에서 테이블에 직접 액세스하는 사용자가 선호할 수 있습니다. 테이블 의미 체계의 차이점에 대한 개요는 테이블이란?을 참조하세요.

일부 레거시 워크로드는 파일 경로를 통해 Delta Lake 데이터와 단독으로 상호 작용하고 테이블을 전혀 등록하지 않을 수 있습니다. 이 데이터는 여전히 Lakehouse 데이터이지만 Unity 카탈로그에 등록되지 않았기 때문에 검색하기가 더 어려울 수 있습니다.

참고 항목

작업 영역 관리자가 Unity 카탈로그를 사용하도록 데이터 거버넌스를 업그레이드하지 않았을 수 있습니다. Unity 카탈로그 없이 Databricks Lakehouse의 많은 이점을 얻을 수 있지만 이 문서 또는 Azure Databricks 설명서 전체에서 나열된 모든 기능이 지원되지는 않습니다.

외부로 간주되는 데이터는 무엇인가요?

Databricks Lakehouse에 없는 모든 데이터는 외부 데이터로 간주될 수 있습니다. 외부 데이터의 몇 가지 예는 다음과 같습니다.

  • 레이크하우스 페더레이션에 등록된 외세 테이블입니다.
  • Parquet에서 지원되는 Hive 메타스토어의 테이블입니다.
  • JSON에서 지원되는 Unity 카탈로그의 외부 테이블입니다.
  • 클라우드 개체 스토리지에 저장된 CSV 데이터입니다.
  • Kafka에서 읽은 스트리밍 데이터입니다.

Azure Databricks는 많은 데이터 원본에 대한 연결 구성을 지원합니다. 데이터 원본에 대한 커넥트 참조하세요.

Unity 카탈로그를 사용하여 여러 형식 및 외부 시스템에 저장된 데이터에 대한 액세스를 제어하고 테이블을 정의할 수 있지만 Delta Lake는 레이크하우스에서 데이터를 고려해야 하는 요구 사항입니다.

Delta Lake는 데이터 무결성 및 일관성을 기본 데 중요한 Azure Databricks의 모든 트랜잭션 보증을 제공합니다. Azure Databricks 데이터의 트랜잭션 보장 및 중요한 이유에 대해 자세히 알아보려면 Azure Databricks에서 ACID 보장이란?을 참조하세요.

대부분의 Azure Databricks 사용자는 레이크하우스 데이터와 외부 데이터의 조합을 쿼리합니다. 외부 데이터로 커넥트 항상 데이터를 레이크하우스로 가져오는 데이터 수집 및 ETL 파이프라인의 첫 번째 단계입니다. 데이터 수집에 대한 자세한 내용은 Databricks Lakehouse로 데이터 수집을 참조 하세요.

이름별 테이블 쿼리

테이블로 등록된 모든 데이터에 대해 Databricks는 테이블 이름을 사용하여 쿼리하는 것이 좋습니다.

Unity 카탈로그를 사용하는 경우 테이블은 다음 형식 <catalog-name>.<schema-name>.<table-name>의 3계층 네임스페이스를 사용합니다.

Unity 카탈로그가 없으면 테이블 식별자는 형식 <schema-name>.<table-name>을 사용합니다.

참고 항목

Azure Databricks는 Apache Spark에서 SQL 구문의 대부분을 상속하며, 이 구문은 구별 SCHEMADATABASE되지 않습니다.

테이블 이름별 쿼리는 모든 Azure Databricks 실행 컨텍스트 및 지원되는 언어에서 지원됩니다.

SQL

SELECT * FROM catalog_name.schema_name.table_name

Python

spark.read.table("catalog_name.schema_name.table_name")

경로별 데이터 쿼리

파일 경로를 사용하여 구조화, 반구조화 및 구조화되지 않은 데이터를 쿼리할 수 있습니다. Azure Databricks의 대부분의 파일은 클라우드 개체 스토리지에서 지원됩니다. Azure Databricks의 파일 작업을 참조 하세요.

Databricks는 Unity 카탈로그를 사용하여 클라우드 개체 스토리지에 대한 모든 액세스를 구성하고 직접 쿼리되는 개체 스토리지 위치에 대한 볼륨을 정의하는 것이 좋습니다. 볼륨은 파일 경로에 대한 카탈로그 및 스키마 이름을 사용하여 클라우드 개체 스토리지의 위치 및 파일에 사람이 읽을 수 있는 별칭을 제공합니다. Unity 카탈로그를 사용하여 클라우드 개체 스토리지에 대한 커넥트 참조하세요.

다음 예제에서는 Unity 카탈로그 볼륨 경로를 사용하여 JSON 데이터를 읽는 방법을 보여 줍니다.

SQL

SELECT * FROM json.`/Volumes/catalog_name/schema_name/volume_name/path/to/data`

Python

spark.read.format("json").load("/Volumes/catalog_name/schema_name/volume_name/path/to/data")

Unity 카탈로그 볼륨으로 구성되지 않은 클라우드 위치의 경우 URI를 사용하여 직접 데이터를 쿼리할 수 있습니다. URI를 사용하여 데이터를 쿼리하려면 클라우드 개체 스토리지에 대한 액세스를 구성해야 합니다. Azure Databricks에 대한 클라우드 개체 스토리지에 대한 액세스 구성을 참조 하세요.

다음 예제에서는 URI를 사용하여 Azure Data Lake Storage Gen2, GCS 및 S3에서 JSON 데이터를 쿼리하는 방법을 보여 줍니다.

SQL

SELECT * FROM json.`abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data`;

SELECT * FROM json.`gs://bucket_name/path/to/data`;

SELECT * FROM json.`s3://bucket_name/path/to/data`;

Python

spark.read.format("json").load("abfss://container-name@storage-account-name.dfs.core.windows.net/path/to/data")

spark.read.format("json").load("gs://bucket_name/path/to/data")

spark.read.format("json").load("s3://bucket_name/path/to/data")

SQL 웨어하우스를 사용하여 데이터 쿼리

Azure Databricks는 다음 인터페이스에서 컴퓨팅에 SQL 웨어하우스를 사용합니다.

  • SQL 편집기
  • Databricks SQL 쿼리
  • 대시보드
  • 레거시 대시보드
  • SQL 경고

필요에 따라 다음 제품과 함께 SQL 웨어하우스를 사용할 수 있습니다.

  • Databricks Notebook
  • Databricks 파일 편집기
  • Databricks 워크플로

SQL 웨어하우스를 사용하여 데이터를 쿼리하는 경우 SQL 구문만 사용할 수 있습니다. 다른 프로그래밍 언어 및 API는 지원되지 않습니다.

Unity 카탈로그에 사용하도록 설정된 작업 영역의 경우 SQL 웨어하우스는 항상 Unity 카탈로그를 사용하여 데이터 원본에 대한 액세스를 관리합니다.

SQL 웨어하우스에서 실행되는 대부분의 쿼리는 테이블을 대상으로 합니다. 데이터 파일을 대상으로 하는 쿼리는 Unity 카탈로그 볼륨을 활용하여 스토리지 위치에 대한 액세스를 관리해야 합니다.

SQL 웨어하우스에서 실행되는 쿼리에서 직접 URI를 사용하면 예기치 않은 오류가 발생할 수 있습니다.

모든 용도의 컴퓨팅 또는 작업 컴퓨팅을 사용하여 데이터 쿼리

Databricks Notebook, 워크플로 및 파일 편집기에서 실행하는 대부분의 쿼리는 Databricks 런타임으로 구성된 컴퓨팅 클러스터에 대해 실행됩니다. 이러한 클러스터를 대화형으로 실행하도록 구성하거나 워크플로를 구동하는 작업 컴퓨팅으로 배포할 수 있습니다. Databricks는 비대화형 워크로드에 항상 작업 컴퓨팅을 사용하는 것이 좋습니다.

대화형 워크로드 및 비대화형 워크로드

많은 사용자가 개발 중에 변환이 처리되는 동안 쿼리 결과를 보는 것이 유용하다고 봅니다. 대화형 워크로드를 다목적 컴퓨팅에서 작업 컴퓨팅으로 이동하면 결과를 표시하는 쿼리를 제거하여 시간과 처리 비용을 절약할 수 있습니다.

Apache Spark는 지연 코드 실행을 사용합니다. 즉, 결과가 필요에 따라 계산되며, 결과를 강제로 적용하지 않으면 데이터 원본에 대한 여러 변환 또는 쿼리를 단일 쿼리로 최적화할 수 있습니다. 이는 다음 메서드에 결과를 전달하기 전에 계산을 순서대로 처리해야 하는 pandas에서 사용되는 즉시 실행 모드와 대조됩니다.

클린 변환되고 집계된 데이터를 새 데이터 세트로 저장하는 것이 목표인 경우 실행하도록 예약하기 전에 코드의 결과를 표시하는 쿼리를 제거해야 합니다.

소규모 작업 및 작은 데이터 세트의 경우 시간과 비용 절감이 미미할 수 있습니다. 그러나 작업이 많을 경우 수동으로 검사하지 않을 수 있는 결과를 계산하고 Notebook에 인쇄하는 데 상당한 시간이 낭비될 수 있습니다. 저장된 출력을 저장한 후 거의 비용 없이 동일한 결과를 쿼리할 수 있습니다.