(이 글은 AI의 도움을 받아 번역되었습니다. 원문이 궁금하시다면 여기를 클릭해 주세요)
글로벌 기업용 애플리케이션을 구축하는 것은 다양한 언어를 처리하고 일관성 없는 데이터 입력을 처리하는 것을 의미합니다. 데이터베이스는 어떻게 독일어에서 "Äpfel"을 "Apfel" 다음에 정렬하거나 프랑스어에서 "ç"를 "c"로 처리하는지 알 수 있을까요? 또는 사용자가 "John Smith"와 "john smith"를 입력하면 이 둘이 같은 것인지 판단해야 할까요?
정렬은 언어와 대소문자 민감성을 존중하는 방식으로 텍스트를 정렬하고 비교하는 규칙을 정의함으로써 데이터 처리를 간소화합니다. 정렬은 데이터베이스를 언어 및 맥락에 맞게 조정하여 사용자가 예상하는 대로 텍스트를 처리하도록 합니다.
우리는 기쁜 마음으로 Databricks Runtime 16.1(곧 Databricks SQL Preview Channel 버전 2024.50 및 Databricks Delta Live Tables)에서 공개 미리보기로 사용 가능한 collations을 공유하게 되었습니다. Collations 은 대소문자 구분, 악센트 구분 등 특정 언어 요구 사항에 맞게 문자열 비교 규칙을 정의하는 메커니즘을 제공합니다. 이 블로그에서는 collations이 어떻게 작동하는지, 왜 중요한지, 그리고 어떻게 자신의 필요에 맞는 것을 선택할 수 있는지에 대해 알아보겠습니다.
이제 Collations를 사용하면 사용자는 100개 이상의 언어별 collation 규칙 중에서 선택하여 데이터 워크플로우에 적용할 수 있습니다. 이를 통해 다국어 텍스트 데이터셋의 정렬, 검색, 결합 등의 작업을 용이하게 할 수 있습니다. Collation 지원은 기존 데이터베이스 시스템에서 이전할 때 동일한 규칙을 적용하는 것을 더 쉽게 만들어 줄 것입니다. 이 기능은 대소문자 구분 없이 또는 악센트 구분 없이 비교가 필요한 일반적인 쿼리에 대해 성능을 크게 향상시키고 코드를 단순화하는 데 특히 유용합니다.
Databricks의 정렬 지원에는 다음이 포함됩니다:
정렬 지원은 완전히 오픈 소스화되어 Apache Spark™와 Delta Lake에 통합되어 있습니다.
콜레이션은 조인, 집계, 윈도우 함수, 필터 등의 작업이 콜레이션 데이터와 원활하게 작동할 수 있도록 기존 Spark 기능과의 강력한 통합을 제공합니다. 대부분의 문자열 표현식은 콜레이션과 호환되어 CONTAINS, STARTSWITH, REPLACE, TRIM 등 다양한 표현식에서 사용할 수 있습니다. 콜레이션에 대한 자세한 내용은 문서에 있습니다.
Collations을 사용하기 위해 시작하려면, 적절한 collation을 가진 테이블 열을 생성하거나 수정하십시오. 그리스 이름의 경우, EL_AI collation을 사용하게 될 것이며, 여기서 EL 은 그리스어를 위한 언어 식별자이고, AI 는 악센트에 민감하지 않음을 의미합니다. 악센트가 없는 영어 이름의 경우, UTF8_LCASE를 사용하게 될 것입니다.
정렬이 가능하게 하는 시나리오를 보여주기 위해 다음 작업을 수행해 봅시다:
호머의 Iliad 에서 영웅들의 이름이 담긴 표를 사용하여 그리스어와 영어 모두로 보여드리겠습니다:
사용 가능한 모든 정렬을 나열하려면 collations TVF를 쿼리할 수 있습니다 - SELECT * FROM collations().
다음 쿼리가 데이터 스킵을 활용할 수 있도록 하려면 ALTER 명령어 이후에 ANALYZE 명령어를 실행해야 합니다:
이제, 영어 이름을 명시적으로 비교하기 전에 LOWER 를 수행할 필요가 없습니다. 파일 가지치기도 자동으로 이루어집니다.
그리스어 규칙에 따라 정렬하려면 단순히 ORDER BY를 사용하면 됩니다. EL_AI collation 없이 정렬하는 것과 결과가 다를 것임을 유의하세요.
그리고 발음에 민감하지 않은 방식으로 검색하려면, 예를 들어 Agamemnon (또는 그리스어로는 Ἀγαμέμνων)을 참조하는 모든 행에 대해 그리스어 이름의 발음이 있는 버전과 일치하는 필터를 적용하면 됩니다.
정렬 지원은 대소문자 구분 없는 결과를 얻기 위해 비용이 많이 드는 작업을 수행할 필요를 없애고, 프로세스를 간소화하고 효율성을 향상시킵니다. 아래 그래프는 LOWER SQL 함수를 사용한 실행 시간과 대소문자 구분 없는 결과를 얻기 위한 정렬 지원을 비교합니다. 비교는 10억 개의 무작위로 생성된 문자열에서 수행되었습니다. 쿼리는 'col'이라는 어떤 열에서 'abc'와 동일한 모든 문자열을 대소문자 구분 없이 필터링하는 것을 목표로 합니다. 레거시 UTF8_BINARY 정렬이 사용되는 시나리오에서 필터 조건은 LOWER(col) == ‘abc’입니다. 'col' 열이 UTF8_LCASE 정렬로 정렬되면 필터 조건은 단순히 col == ‘abc’이며, 이는 동일한 결과를 달성합니다. 정렬을 사용하면 쿼리 실행이 최대 22배 빨라집니다 (이 경우, 어느 쿼리에서도 Photon이 사용되지 않음).
Photon을 사용하면 성능 향상이 더욱 두드러질 수 있습니다 (실제 속도는 정렬, 함수, 데이터에 따라 다릅니다). 아래 그래프는 UTF8_LCASE 정렬을 사용하여 동등 비교, STARTSWITH, ENDSWITH, CONTAINS SQL 함수를 사용하여 Photon을 사용하지 않고 속도를 보여줍니다. 함수는 1000자 길이의 무작위로 생성된 ASCII 문자열 데이터 세트에서 실행되었습니다. 예에서 STARTSWITH와 ENDSWITH는 정렬을 사용할 때 10배의 성능 향상 을 보였습니다.
Photon-optimized 구현을 제외하고, 모든 collations 기능은 오픈 소스 Spark에서 사용할 수 있습니다. 데이터 형식 변경이 없으며, 이는 데이터가 기본 파일에서 UTF-8로 인코딩되어 유지되고, 오픈 소스 Spark와 Delta Lake 모두에서 모든 기능이 지원된다는 것을 의미합니다. 이는 고객이 고정되지 않았으며, 코드를 Spark 생태계 전반에 걸쳐 이동 가능하다고 생각해야 함을 의미합니다.
가까운 미래에 고객들은 카탈로그, 스키마, 또는 테이블 레벨에서 collations을 설정할 수 있게 될 것입니다. 또한 RTRIM에 대한 지원도 곧 제공될 예정으로, 이를 통해 원치 않는 후행 공백을 무시하고 문자열 비교를 할 수 있게 됩니다. Databricks 홈페이지와 'What’s Coming' 문서 페이지를 통해 업데이트를 확인하세요.
Databricks 문서를 읽고 정렬을 시작하세요.
Databricks SQL에 대해 더 알아보려면 우리의 웹사이트 또는 문서를 읽어보세요. 또한 Databricks SQL의 제품 투어를 확인해 보실 수 있습니다. 기존의 웨어하우스를 고성능, 서버리스 데이터 웨어하우스로 이전하고 싶으시고, 훌륭한 사용자 경험과 더 낮은 총 비용을 원하신다면 Databricks SQL이 해결책입니다 -- 무료로 시도해 보세요.