SQL 스크립팅 발표 블로그 시리즈의 두 번째 부분에서, 우리는 첫 번째 부분에서 언급한 관리 작업, 즉 테이블의 모든 STRING 열에 대소문자 구분 없는 규칙을 적용하는 방법을 살펴볼 것입니다. 우리는 그 예제를 단계별로 살펴보고, 사용된 기능을 설명하고, 단일 테이블을 넘어 전체 스키마를 커버하도록 확장할 것입니다.
당신은 또한 따라갈 수 있습니다 이 노트북에서.
Databricks는 다양한 언어 인식, 대소문자 구분 없는, 악센트 구분 없는 콜레이션을 지원합니다. 이 기능은 새로운 테이블과 열에 쉽게 사용할 수 있습니다. 그러나 만약 upper() 또는 lower()를 모든 곳에서 사용하고 있는 기존 시스템이 있고, 원래의 대소문자 구분 없는 콜레이션과 관련된 성능 향상을 얻으면서 쿼리를 단순화하고 싶다면 어떻게 해야 할까요? 그것은 일부 프로그래밍을 필요로 할 것입니다; 이제 SQL에서 모두 수행할 수 있습니다.
다음 테스트 스키마를 사용해봅시다:
순서는 모든 대문자가 모든 소문자 앞에 오는 ASCII 코드 포인트에 기반합니다. upper()나 lower()를 추가하지 않고 이 문제를 해결할 수 있나요?
첫 번째 단계는 테이블에게 새로 추가된 열에 대한 기본 정렬을 변경하도록 지시하는 것입니다. 노트북이 자동으로 감지하고 위젯을 추가하는 매개변수 마커로 로컬 변수를 공급할 수 있습니다. 또한 EXECUTE IMMEDIATE 를 사용하여 동적으로 구성된 ALTER TABLE 문을 실행할 수 있습니다.
모든 SQL 스크립트는 BEGIN .. END (복합) 문장으로 구성됩니다. 로컬 변수는 복합 문 내에서 먼저 정의되며, 그 다음에 로직이 이어집니다.
이것은 모두 선형 문장의 집합입니다. 지금까지, 복합문 없이 SQL 세션 변수로 이 모든 것을 작성할 수 있었습니다. 당신도 많은 성과를 이루지 못했습니다. 결국, 기존 열의 정렬 순서를 변경하려고 했습니다. 이를 위해서는 다음을 필요로 합니다:
간단히 말해서, INFORMATION_SCHEMA.COLUMNS 테이블을 순회해야 합니다.
SQL 스크립팅은 루프를 제어하는 네 가지 방법을 제공합니다.
이제, 우리의 collation 스크립트에 FOR 루프를 적용해봅시다. 이 쿼리는 테이블의 모든 문자열 열의 열 이름을 가져옵니다. 루프 본문은 차례로 각 열의 collation을 변경합니다:
