스칼라 서브쿼리 예제

그러나 데이터베이스 함수를 사용하여 쿼리에서 작동하는 연산자는 추가할 수 없습니다. Slick Scala-to-SQL 컴파일러는 생성할 수 있는 가장 간단한 SQL 쿼리로 컴파일하기 위해 쿼리 구조에 대한 지식이 필요합니다. 현재 해당 컨텍스트에서 사용자 지정 쿼리 연산자도 처리할 수 없습니다. (이 제한이 미래에 다소 해제 될 수있는 몇 가지 아이디어가 있지만, 더 많은 조사가 필요합니다). 이러한 연산자에 대 한 예로는 MySQL 인덱스 힌트, Slick의 형식 안전 API에 의해 지원 되지 않습니다 및 사용자에 의해 추가할 수 없습니다. 이러한 연산자가 필요한 경우 일반 SQL을 사용하여 전체 쿼리를 작성해야 합니다. 연산자가 쿼리의 반환 유형을 변경하지 않는 경우 다음 섹션에 설명된 해결 방법을 사용할 수도 있습니다. Slick은 Scala-to-SQL 컴파일러를 실행하여 형식에 안전한 쿼리 기능을 구현합니다. 컴파일러는 Scala 런타임에서 실행되며 복잡한 쿼리의 경우 두 번째 또는 그 이상까지 걸릴 수도 있습니다.

정의된 쿼리당 한 번만 컴파일러를 실행하고 선행(예: 각 실행 대신 앱 시작 시)을 반복해서 실행하는 것이 매우 유용할 수 있습니다. 컴파일된 쿼리를 사용하면 다시 사용할 수 있도록 생성된 SQL을 캐시할 수 있습니다. 그들이 추가 한 큰 기능 중 하나는 하위 쿼리에 대한 지원이었습니다. 하위 쿼리는 다른 쿼리 내에서 쿼리됩니다. 그것은 훨씬 쉽고 더 수행 멀티 레벨 집계를 작성하는 SQL의 강력한 기능입니다. 스칼라에서 클로저가 작동하는 방식 때문에 중첩 된 맵 / rdd 기반 작업에 대한 지원은 없습니다. 특히 ScalarSubquery 식이 있는 경우 논리 계획에서 스칼라 하위 쿼리#[exprId] [조건문자열]로 나타납니다. RewriteCorrelatedScalarSubquery 최적화를 생성하기 위해 해결조인 스파크 분석기는 해결 하위 쿼리 확인 규칙을 사용하여 하위 쿼리를 해결하고 결국 유효한지 확인합니다. SQL 하위 쿼리 삽입 문의 예 – 비교 구조가 있는 CUSTOMERS_BKP 테이블을 CUSTOMERS 테이블로 고려합니다. 현재 전체 CUSTOMERS 테이블을 CUSTOMERS_BKP 테이블에 복제하려면 함께 제공되는 언어 구조를 사용할 수 있습니다. SQL 연산자 메서드 .in 하위 쿼리를 보세요. 인메모리 스칼라 컬렉션의 경우 .inSet 메서드를 대신 사용할 수 있습니다.

재작성은 constructLeftJoins(자식: 논리계획, 하위 쿼리: ArrayBuffer[ScalarSubquery]) 메서드를 기반으로 합니다. 변환 논리는 매우 간단합니다. 하위 쿼리는 쿼리와 내부 및 외부 쿼리를 결합하는 조건의 두 부분으로 분할됩니다. 왼쪽 외부 조인을 구성하는 것은 매우 쉽습니다: Scalar 데이터베이스 함수에 대한 자세한 내용은 이 장에서 찾을 수 있습니다. 스칼라의 groupBy는 그룹화 키 맵을 각 그룹의 행 목록에 반환합니다. 개별 열을 컬렉션으로 자동으로 변환할 수 없습니다. 이 작업은 그룹에서 원하는 열로 매핑한 다음 SQL과 같은 집계를 허용하여 스칼라에서 명시적으로 수행해야 합니다. 스칼라의 WHERE에 해당하는 값은 필터입니다. 비교를 위해 === 대신 ===를 사용해야 합니다. JDBC / SQL에서 매끄러운으로 오는 것은 여러 가지 면에서 매우 간단합니다. Slick은 연결을 처리하고 결과를 가져오고 쿼리 언어를 사용하는 더 좋은 API를 사용하여 검색어를 사용하는 드롭인 대체품으로 간주될 수 있으며, 이 언어는 쿼리를 문자열로 작성하는 것보다 Scala에 더 잘 통합되어 있습니다.

Comments

No one has said anything yet.

Comments are closed.