다음을 통해 공유


레이크하우스 페더레이션 성능 권장 사항

이 문서에서는 Lakehouse Federation 쿼리의 성능을 개선하기 위한 지침을 제공합니다.

AND 연산자를 사용하여 여러 조건자를 결합하십시오.

Databricks 런타임은 네트워크를 통해 페치되는 레코드 수를 줄이기 위해 리모트 데이터베이스 엔진에 조건을 내리려고 합니다. 조건자를 푸시다운할 수 없는 경우 원격 데이터베이스 엔진에서 실행되는 쿼리는 조건자를 제외하므로 Databricks 런타임을 사용하여 필터링을 수행해야 합니다. 그러나 필터의 특정 부분을 푸시다운할 수 없는 경우 필터의 다른 부분은 연산자에 의해 AND 조인된 경우에도 계속 푸시다운될 수 있습니다.

예제 1

Databricks 쿼리:

SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john'

적절한 변환이 ILIKE 없으므로 식을 원격 데이터베이스(예: MySQL)로 푸시다운할 수 없습니다. Databricks 런타임을 사용하여 필터링을 수행해야 합니다.

원격 데이터베이스로 전송된 쿼리는 모든 레코드를 반환합니다.

SELECT * FROM catalog.schema.table

예제 2

Databricks 쿼리:

SELECT * FROM foreign_catalog.schema.table WHERE name ILIKE 'john' AND date > '2025-05-01'

적절한 번역이 없기 때문에 ILIKE 식을 원격 데이터베이스(예: MySQL)로 푸시다운할 수 없습니다. 하지만 날짜 비교는 푸시다운할 수 있습니다. Databricks 런타임을 사용하여 이름 필터링을 수행해야 하지만 날짜 비교를 수행하면 페치되는 레코드 수가 줄어듭니다.

원격 데이터베이스로 전송된 쿼리는 레코드의 하위 집합을 반환합니다.

SELECT * FROM catalog.schema.table WHERE date > '2025-05-01'

원격 데이터베이스에서 실행할 쿼리 확인

원격 데이터베이스로 전송될 쿼리를 확인하려면 FORMATTED 명령을 실행EXPLAIN합니다.

중요합니다

EXPLAIN FORMATTED으로 인해 실제 쿼리가 출력의 쿼리와 다를 수 있습니다.

원격 데이터베이스에서 가져온 일괄 처리의 크기 설정

JDBC 전송 프로토콜을 사용하는 다음 커넥터를 구성하여 원격 시스템에서 데이터를 가져오는 방법을 제어할 수 있습니다.

  • 데이터브릭스
  • Microsoft SQL Server
  • Microsoft Azure Synapse
  • MySQL
  • 오라클
  • PostgreSQL
  • Salesforce Data 360
  • Teradata

JDBC 인출 크기는 왕복당 가져올 행 수를 결정합니다. 기본적으로 대부분의 JDBC 커넥터는 데이터를 원자성으로 가져옵니다. 이로 인해 데이터 양이 사용 가능한 메모리를 초과할 수 있습니다.

메모리 부족 오류를 방지하려면 fetchSize 매개 변수를 설정합니다. fetchSize 0이 아닌 값으로 설정되면 커넥터는 데이터를 일괄 처리로 읽습니다. 일괄 처리당 최대 행 수는 fetchSize값과 같습니다. Databricks는 일괄 처리의 행 수가 너무 작으면 전체 쿼리 실행 시간이 길어질 수 있으므로 큰 fetchSize 값(예 100,000: )을 지정하는 것이 좋습니다.

이 매개 변수를 사용하면 작업자 노드가 데이터를 일괄 처리로 읽을 수 있지만 병렬로 읽을 수는 없습니다.

컴퓨팅 요구 사항:

  • Databricks Runtime 16.1 이상에서 컴퓨팅을 사용해야 합니다. SQL 웨어하우스는 Pro 또는 Serverless여야 하며 2024.50을 사용해야 합니다.
SELECT * FROM mySqlCatalog.schema.table WITH ('fetchSize' 100000)

파티션 크기 매개 변수 설정(Snowflake)

Snowflake를 사용하면 여러 파티션에서 데이터를 가져올 수 있으므로 여러 실행기와 병렬 처리를 수행할 수 있습니다. 매개 변수를 설정하여 적절한 파티션 크기를 선택하는 것이 중요합니다 partition_size_in_mb . 이 매개 변수는 각 파티션에 대해 권장되는 압축되지 않은 크기를 지정합니다. 파티션 수를 줄이려면 더 큰 값을 지정합니다. 기본값은 (MB)입니다 100 .

매개 변수는 partition_size_in_mb 권장 크기를 설정하며 파티션의 실제 크기는 다를 수 있습니다.

컴퓨팅 요구 사항:

  • Databricks Runtime 16.1 이상에서 컴퓨팅을 사용해야 합니다. SQL 웨어하우스는 Pro 또는 Serverless여야 하며 2024.50을 사용해야 합니다.
SELECT * FROM snowflakeCatalog.schema.table WITH ('partition_size_in_mb' 1000)

JDBC 커넥터에 대해 병렬 읽기 사용

JDBC 전송 프로토콜을 지원하는 커넥터는 쿼리를 분할하여 데이터를 병렬로 읽을 수 있습니다. 다음 커넥터에 대해 병렬 읽기를 구성할 수 있습니다.

  • 데이터브릭스
  • Microsoft SQL Server
  • Microsoft Azure Synapse
  • MySQL
  • 오라클
  • PostgreSQL
  • 적색편이
  • Salesforce Data 360
  • Teradata

이렇게 하면 여러 실행기가 동시에 데이터를 가져올 수 있으므로 큰 테이블의 성능이 크게 향상됩니다.

병렬 읽기를 사용하도록 설정하려면 다음 매개 변수를 지정합니다.

  • numPartitions: 병렬 처리에 사용할 파티션 수
  • partitionColumn: 쿼리를 분할하는 데 사용되는 숫자 열의 이름입니다.
  • lowerBound: 파티션 보폭을 결정하기 위해 사용되는 최소값은 partitionColumn입니다.
  • upperBound: 파티션 진행을 결정하는 데 사용되는 최대값 partitionColumn 입니다.

중요합니다

lowerBoundupperBound 값은 테이블의 행을 필터링하는 것이 아니라 파티션 스트라이드를 결정하는 데만 사용됩니다. 테이블의 모든 행이 분할되고 반환됩니다.

파티션 열은 다음이어야 합니다.

  • 숫자 칼럼
  • 범위 전체에 균등하게 분산
  • 성능 향상을 위한 인덱싱된 열

컴퓨팅 요구 사항:

  • Databricks Runtime 17.1 이상에서 컴퓨팅을 사용해야 합니다. SQL 웨어하우스는 프로 또는 서버리스여야 하며 2025.25를 사용해야 합니다.

다음 예제에서는 쿼리가 열에 id 따라 4개의 병렬 파티션으로 분할되고 각 파티션은 약 250개의 ID 범위를 처리합니다(각각 id 간에 11000단일 레코드가 있다고 가정).

SELECT * FROM mySqlCatalog.schema.table WITH (
  'numPartitions' 4,
  'partitionColumn' 'id',
  'lowerBound' 1,
  'upperBound' 1000
)

레이크하우스 페더레이션의 푸시다운 참가

중요합니다

이 기능은 공개 미리보기 단계에 있습니다.

Databricks Lakehouse 연합에서 조인 푸시다운이 어떻게 작동하는지 알아봅니다.

조인 푸시다운 개요

조인 푸시다운은 Databricks가 데이터를 가져오고 로컬로 조인을 수행하는 대신 조인 작업을 원격 데이터베이스 엔진에 푸시하는 쿼리 최적화 기술입니다. 이렇게 하면 원격 데이터베이스의 기본 제공 조인 기능을 활용하여 네트워크 트래픽을 크게 줄이고 쿼리 성능을 향상시킵니다.

지원되는 데이터 원본

다음 데이터 원본은 조인 푸시다운을 지원합니다.

  • 오라클
  • PostgreSQL
  • MySQL
  • SQL Server
  • Teradata
  • 적색편이
  • Snowflake
  • BigQuery

이 기능은 일반적으로 사용 가능하며 Redshift, Snowflake 및 BigQuery에 대해 기본적으로 사용하도록 설정됩니다. 다음 제한 사항 및 요구 사항은 Oracle, PostgreSQL, MySQL, SQL Server 및 Teradata 커넥터에만 적용됩니다.

요구 사항

  • Databricks Runtime 17.2 이상에서 컴퓨팅을 사용해야 합니다.
  • SQL 웨어하우스는 Pro 또는 Serverless여야 하며 2025.30을 사용해야 합니다.
  • Databricks UI의 미리 보기 페이지에서 페더레이션된 쿼리에 대한 조인 푸시다운(공개 미리 보기) 을 설정/해제해야 합니다.

제한점

  • 내부 조인, 왼쪽 외부 조인 및 오른쪽 외부 조인만 지원됩니다.
  • 조인의 하위 항목의 별칭은 Databricks Runtime 17.3 이상에서만 지원됩니다.

노드 계층 구조 요구 사항

조인을 푸시다운하려면 왼쪽 및 오른쪽 자식 분기의 모든 노드도 푸시 가능한 상태여야 합니다. 다음 규칙이 적용됩니다.

  • 지원되는 자식 노드: 푸시다운이 성공하기 위해 쿼리 계획에서 조인 아래에 나타날 수 있는 노드는 조인, 필터, 샘플, 및 검사 노드뿐입니다.
  • 지원되지 않는 자식 노드: 조인 아래의 왼쪽 또는 오른쪽 분기에 제한, 오프셋 또는 집계 작업이 표시되는 경우 조인을 푸시다운할 수 없습니다.
  • 조인을 기반으로 하는 작업: 조인 위에 적용할 때 집계, 제한 및 오프셋 작업을 푸시다운할 수 있습니다.

예시

-- Supported: Join two table scans
SELECT *
FROM table1
INNER JOIN table2
ON col_from_table1 = col_from_table2 + 1

-- Supported: Join two table scans with a nested select query
SELECT *
FROM (SELECT a FROM table1) q1
INNER JOIN (SELECT a FROM table2) q2
ON q1.a = q2.a + 1

-- Supported: Child subqueries with aliases in projection (:re[DBR] 17.3+)
SELECT *
FROM (SELECT a AS a1 FROM table1) t1
INNER JOIN (SELECT a AS a2 FROM table2) t2
ON t1.a1 = t2.a2 + 1

-- Supported: Join with filters below
SELECT *
FROM (SELECT * FROM table1 WHERE a > 10) t1
INNER JOIN (SELECT * FROM table2 WHERE b < 20) t2
ON t1.id = t2.id

-- Supported: Aggregate on top of join
SELECT COUNT(*)
FROM table1 t1
INNER JOIN table2 t2
ON t1.id = t2.id

-- Not supported: Join on top of aggregate
SELECT *
FROM (SELECT id, COUNT(*) as cnt FROM table1 GROUP BY id) t1
INNER JOIN table2 t2
ON t1.id = t2.id

-- Not supported: Join on top of limit
SELECT *
FROM (SELECT * FROM table1 LIMIT 100) t1
INNER JOIN table2 t2
ON t1.id = t2.id

Observability

조인이 푸시다운되고 있는지 확인하려면 EXPLAIN FORMATTED를 사용하세요.

EXPLAIN FORMATTED
SELECT *
FROM foreign_catalog.schema.table1 t1
INNER JOIN foreign_catalog.schema.table2 t2
ON t1.id = t2.id

성공적인 조인 푸시다운을 보여 주는 예제 출력:

== Physical Plan ==
*(1) Scan JDBCRelation
PushedFilters: [id = id_1],
PushedJoins:
   [L]: Relation: foreign_catalog.schema.table1
        PushedFilters: [ID IS NOT NULL]
   [R]: Relation: foreign_catalog.schema.table2
        PushedFilters: [ID IS NOT NULL]

이 출력에서 다음을 수행합니다.

  • id_1 는 열에 중복 이름이 있는 경우 모호성을 해결하기 위해 Databricks가 자동으로 생성하는 별칭입니다.
  • 위의 PushedFilters 내용은 PushedJoins 원격 데이터베이스에 푸시되는 실제 조인 조건을 나타냅니다.
  • 각 관계([L] 및 [R])의 PushedFilters는 각 테이블에 적용된 추가 필터 조건을 보여줍니다.