다음을 통해 공유


쿼리 가속 SQL 언어 참조

쿼리 가속은 Blob 콘텐츠에 대한 쿼리를 표현하기 위한 ANSI SQL과 유사한 언어를 지원합니다. 쿼리 가속 SQL 언어는 지원되는 데이터 형식, 연산자 등이 제한된 ANSI SQL의 하위 집합이지만, JSON과 같은 계층적 반구조적 데이터 형식에 대한 쿼리를 지원하기 위해 ANSI SQL에서도 확장됩니다.

SELECT 구문

쿼리 가속에서 지원되는 유일한 SQL 문은 SELECT 문입니다. 다음은 식이 true를 반환하는 모든 행을 반환하는 예제입니다.

SELECT * FROM table [WHERE expression] [LIMIT limit]

CSV 형식 데이터의 경우 테이블 은 .이어야 BlobStorage합니다. 즉, REST 호출에 지정된 Blob에 대해 쿼리가 실행됩니다. JSON 형식 데이터의 경우 테이블 은 "테이블 설명자"입니다. 이 문서의 표 설명자 섹션을 참조하세요.

다음 예제에서 WHERE 이 true를 반환하는 각 행에 대해 이 문은 각 프로젝션 식을 계산하여 만들어진 새 행을 반환합니다.

SELECT expression [, expression ...] FROM table [WHERE expression] [LIMIT limit]

SELECT 식의 일부로 하나 이상의 특정 열을 지정할 수 있습니다(예: SELECT Title, Author, ISBN).

비고

SELECT 식에서 사용할 수 있는 특정 열의 최대 수는 49개입니다. SELECT 문이 49개 이상의 열을 반환해야 하는 경우 SELECT 식에 와일드카드 문자(*예: SELECT *)를 사용합니다.

다음 예제에서는 이 true를 반환하는 각 행에 대한 집계 계산(예: 특정 열의 평균 값)을 반환합니다.

SELECT aggregate_expression FROM table [WHERE expression] [LIMIT limit]

다음 예제에서는 CSV 형식 Blob 분할에 적합한 오프셋을 반환합니다. 이 문서의 Sys.Split 섹션을 참조하세요.

SELECT sys.split(split_size)FROM BlobStorage

데이터 형식

데이터 형식 설명
INT 64비트 부호 있는 정수입니다.
공중에 뜨다 64비트("배정밀도") 부동 소수점입니다.
스트링 가변 길이 유니코드 문자열입니다.
타임 스탬프 특정 시점입니다.
불리언 참 또는 거짓.

CSV 형식 데이터에서 값을 읽을 때 모든 값은 문자열로 읽습니다. 문자열 값은 CAST 식을 사용하여 다른 형식으로 변환될 수 있습니다. 컨텍스트에 따라 값이 암시적으로 다른 형식으로 캐스팅될 수 있습니다. 자세한 내용은 데이터 형식 우선 순위(Transact-SQL)를 참조하세요.

표현식

필드 참조

JSON 형식 데이터 또는 헤더 행이 있는 CSV 형식 데이터의 경우 이름으로 필드를 참조할 수 있습니다. 필드 이름은 따옴표로 묶거나 따옴표를 묶지 않을 수 있습니다. 따옴표로 묶인 필드 이름은 큰따옴표(")로 시작하고 끝나며 공백을 포함할 수 있고 대소문자 구분이 있습니다. 따옴 지정되지 않은 필드 이름은 대/소문자를 구분하지 않으며 특수 문자를 포함하지 않을 수 있습니다.

CSV 형식 데이터에서 필드는 서수로 참조될 수도 있으며 접두사에는 밑줄(_) 문자가 수록되어 있습니다. 예를 들어 첫 번째 필드는 _1으로 참조할 수 있으며, 11번째 필드는 _11으로 참조할 수 있습니다. 서수로 필드를 참조하는 것은 머리글 행을 포함하지 않는 CSV 형식 데이터에 유용합니다. 이 경우 특정 필드를 참조하는 유일한 방법은 서수입니다.

운영자

지원되는 표준 SQL 연산자는 다음과 같습니다.

오퍼레이터 설명
= 두 식의 같음(비교 연산자)을 비교합니다.
!= 한 식이 다른 식(비교 연산자)과 같지 않은지 테스트합니다.
<> 같지 않은 두 식(비교 연산자)을 비교합니다.
< 보다 작음(비교 연산자)에 대해 두 식을 비교합니다.
<= 두 식을 보다 작거나 같음(비교 연산자)으로 비교합니다.
> 보다 큼(비교 연산자)에 대해 두 식을 비교합니다.
>= 보다 크거나 같음(비교 연산자)에 대해 두 식을 비교합니다.
+ 두 개의 숫자를 추가합니다. 이 추가 산술 연산자는 날짜에 숫자를 일 단위로 추가할 수도 있습니다.
- 두 숫자(산술 빼기 연산자)를 뺍니다.
/ 한 숫자를 다른 숫자로 나눕니다(산술 나누기 연산자).
* 두 식(산술 곱하기 연산자)을 곱합니다.
% 한 숫자의 나머지를 다른 숫자로 나눈 값을 반환합니다.
AND 두 정수 값 간에 비트 논리 AND 연산을 수행합니다.
OR 지정된 두 정수 값 간에 비트 논리 OR 연산을 수행하여 Transact-SQL 문 내의 이진 식으로 변환됩니다.
NOT 부울 입력 값을 반전합니다.
CAST 한 데이터 형식의 식을 다른 데이터 형식으로 변환합니다.
BETWEEN 테스트할 범위를 지정합니다.
IN 지정된 값이 하위 쿼리 또는 목록의 값과 일치하는지 여부를 결정합니다.
NULLIF 지정된 두 식이 같으면 null 값을 반환합니다.
COALESCE 인수를 순서대로 평가하고 처음에 NULL로 계산되지 않는 첫 번째 식의 현재 값을 반환합니다.

연산자의 왼쪽과 오른쪽에 있는 데이터 형식이 다른 경우 여기에 지정된 규칙인 데이터 형식 우선 순위(Transact-SQL)에 따라 자동 변환이 수행됩니다.

쿼리 가속 SQL 언어는 해당 문서에 설명된 매우 작은 데이터 형식 하위 집합만 지원합니다. 이 문서의 데이터 형식 섹션을 참조하세요.

캐스트

쿼리 가속 SQL 언어는 다음 규칙에 따라 CAST 연산자를 지원합니다. 데이터 형식 변환(데이터베이스 엔진).

쿼리 가속 SQL 언어는 해당 문서에 설명된 데이터 형식의 작은 하위 집합만 지원합니다. 이 문서의 데이터 형식 섹션을 참조하세요.

문자열 함수

쿼리 가속 SQL 언어는 다음 표준 SQL 문자열 함수를 지원합니다.

기능 설명
문자 길이 문자열 표현식이 문자 데이터 형식이면 문자열 표현식의 문자 길이를 반환합니다. 그렇지 않으면 문자열 표현식의 길이를 바이트 단위로 반환합니다(비트 수를 8로 나눈 값보다 작지 않은 가장 작은 정수). (이 함수는 CHARACTER_LENGTH 함수와 같습니다.)
문자 길이 문자열 표현식이 문자 데이터 형식이면 문자열 표현식의 문자 길이를 반환합니다. 그렇지 않으면 문자열 표현식의 길이를 바이트 단위로 반환합니다(비트 수를 8로 나눈 값보다 작지 않은 가장 작은 정수). (이 함수는 CHAR_LENGTH 함수와 동일합니다.
아래 대문자 데이터를 소문자로 변환한 후 문자 식을 반환합니다.
상위 소문자 데이터가 대문자로 변환된 문자 식을 반환합니다.
서브스트링 SQL Server에서 문자, 이진, 텍스트 또는 이미지 식의 일부를 반환합니다.
정리하다 문자열의 시작과 끝에서 공백 문자 char(32) 또는 기타 지정된 문자를 제거합니다.
선도하는 문자열의 시작에서 공백 문자 char(32) 또는 기타 지정된 문자를 제거합니다.
뒤따르는 문자열의 끝에서 공백 문자 char(32) 또는 기타 지정된 문자를 제거합니다.

다음은 몇 가지 예입니다.

기능 예시 결과
문자 길이 SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
문자 길이 SELECT CHAR_LENGTH(_1) from BlobStorage 1
아래 SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
위쪽 SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
부분 문자열 SUBSTRING('123456789', 1, 5) 23456
다듬다 TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

날짜 함수

지원되는 표준 SQL 날짜 함수는 다음과 같습니다.

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

현재 표준 IS08601 모든 날짜 형식 이 변환됩니다.

DATE_ADD 함수

쿼리 가속 SQL 언어는 함수에 대해 연도, 월, 일, 시간, 분, 초를 DATE_ADD 지원합니다.

예제:

DATE_ADD(datepart, quantity, timestamp)
DATE_ADD('minute', 1, CAST('2017-01-02T03:04:05.006Z' AS TIMESTAMP)

DATE_DIFF 함수

쿼리 가속 SQL 언어는 함수에 대해 연도, 월, 일, 시간, 분, 초를 DATE_DIFF 지원합니다.

DATE_DIFF(datepart, timestamp, timestamp)
DATE_DIFF('hour','2018-11-09T00:00+05:30','2018-11-09T01:00:23-08:00') 

EXTRACT 함수

함수에 DATE_ADD 지원되는 날짜 부분 이외의 EXTRACT의 경우 쿼리 가속 SQL 언어는 날짜 부분으로 timezone_hour 및 timezone_minute 지원합니다.

예제:

EXTRACT(datepart FROM timestampstring)
EXTRACT(YEAR FROM '2010-01-01T')

TO_STRING 함수

예제:

TO_STRING(TimeStamp , format)
TO_STRING(CAST('1969-07-20T20:18Z' AS TIMESTAMP),  'MMMM d, y')

이 표에서는 함수의 출력 형식을 지정하는 데 사용할 수 있는 문자열에 대해 TO_STRING 설명합니다.

문자열 서식 지정 출력
yy 2자리 형식의 연도 - '99'로 1999년
y 연도(4자리 형식)
yyyy 연도(4자리 형식)
M 해의 첫 번째 달 - 1
밀리미터 앞에 0이 붙은 월 - 01
1월의 약어 - JAN
음음음 전체 월 - 5월
d 월의 날(1-31)
dd 월의 앞에 0이 붙는 일자 (01-31)
a AM 또는 PM
h 하루 중 시간(1-12)
ㅎㅎ 하루 중 0이 채워진 시간(01-12)
H 하루 중 시간(0-23)
HH 하루 중 제로 패딩 시간(00-23)
m 시간의 분 (0-59)
밀리미터 패딩 0분(00-59)
s 초단위(0-59)
ss 0으로 채워진 초 (00-59)
에스 초의 분수(0.1-0.9)
SS(SS) 초의 분수(0.01-0.99)
SSS 초의 소수 부분 (0.001-0.999)
X 오프셋(시간)
XX 또는 XXXX 시간 및 분(+0430) 오프셋
XXX 또는 XXXXX 시 및 분 단위 오프셋(-07:00)
x 시간 단위 오프셋(7)
xx 또는 xxxx 시간 및 분 단위 오프셋(+0530)
Xxx 또는 xxxxx 시간 및 분 단위 오프셋(+05:30)

TO_TIMESTAMP 함수

IS08601 형식만 지원됩니다.

예제:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

비고

함수를 UTCNOW 사용하여 시스템 시간을 가져올 수도 있습니다.

집계 식

SELECT 문에는 하나 이상의 프로젝션 식 또는 단일 집계 식이 포함될 수 있습니다. 지원되는 집계 식은 다음과 같습니다.

표현 설명
COUNT(*) 조건자 식과 일치하는 레코드 수를 반환합니다.
COUNT(expression) 식이 null이 아닌 레코드 수를 반환합니다.
AVG(expression) 식의 null이 아닌 값의 평균을 반환합니다.
MIN(expression) 식의 최소 null이 아닌 값을 반환합니다.
MAX(expression 식의 최대 null이 아닌 값을 반환합니다.
SUM(expression) 식의 null이 아닌 모든 값의 합계를 반환합니다.

사라진

IS MISSING 연산자는 쿼리 가속 SQL 언어에서 지원하는 유일한 비표준 연산자입니다. JSON 데이터의 경우 특정 입력 레코드에서 필드가 누락된 경우 식 필드는 IS MISSING true 부울 값으로 평가됩니다.

테이블 설명자

CSV 데이터의 경우 테이블 이름은 항상 BlobStorage.입니다. 다음은 그 예입니다.

SELECT * FROM BlobStorage

JSON 데이터의 경우 추가 옵션을 사용할 수 있습니다.

SELECT * FROM BlobStorage[*].path

이렇게 하면 JSON 데이터의 하위 집합에 대한 쿼리가 가능합니다.

JSON 쿼리의 경우 FROM 절의 일부에서 경로를 언급할 수 있습니다. 이러한 경로는 JSON 데이터의 하위 집합을 구문 분석하는 데 도움이 됩니다. 이러한 경로는 JSON 배열 및 개체 값을 참조할 수 있습니다.

이를 더 자세히 이해하는 예제를 살펴보겠습니다.

다음은 샘플 데이터입니다.

{
  "id": 1,
  "name": "mouse",
  "price": 12.5,
  "tags": [
    "wireless",
    "accessory"
  ],
  "dimensions": {
    "length": 3,
    "width": 2,
    "height": 2
  },
  "weight": 0.2,
  "warehouses": [
    {
      "latitude": 41.8,
      "longitude": -87.6
    }
  ]
}

위의 데이터에서 warehouses JSON 개체에만 관심이 있을 수 있습니다. 개체는 warehouses JSON 배열 형식이므로 FROM 절에서 이를 언급할 수 있습니다. 샘플 쿼리는 다음과 같이 표시할 수 있습니다.

SELECT latitude FROM BlobStorage[*].warehouses[*]

쿼리는 모든 필드를 가져오지만 위도만 선택합니다.

JSON 개체 값에만 dimensions 액세스하려는 경우 쿼리에서 해당 개체를 참조하는 데 사용할 수 있습니다. 다음은 그 예입니다.

SELECT length FROM BlobStorage[*].dimensions

이렇게 하면 dimensions 개체 멤버에 대한 액세스도 제한됩니다. JSON 필드의 다른 멤버와 JSON 개체의 내부 값에 액세스하려는 경우 다음 예제와 같이 쿼리를 사용할 수 있습니다.

SELECT weight,warehouses[0].longitude,id,tags[1] FROM BlobStorage[*]

비고

BlobStorage와 BlobStorage[*] 모두 전체 개체를 참조합니다. 그러나 FROM 절에 경로가 있는 경우 BlobStorage[*].path를 사용해야 합니다.

Sys.Split

이는 CSV 형식 데이터에만 사용할 수 있는 SELECT 문의 특수 형식입니다.

SELECT sys.split(split_size) FROM BlobStorage

CSV 데이터 레코드를 일괄 처리하여 다운로드한 다음 처리하려는 경우 이 문을 사용합니다. 이렇게 하면 모든 레코드를 한 번에 다운로드하는 대신 병렬로 레코드를 처리할 수 있습니다. 이 문은 CSV 파일의 레코드를 반환하지 않습니다. 대신 일괄 처리 크기들의 모음을 반환합니다. 그런 다음 각 배치 크기를 사용하여 데이터 레코드를 가져올 수 있습니다.

split_size 매개 변수를 사용하여 각 일괄 처리에 포함할 바이트 수를 지정합니다. 예를 들어 한 번에 10MB의 데이터만 처리하려는 경우 10MB는 10,485,760바이트이므로 문은 다음과 SELECT sys.split(10485760)FROM BlobStorage 같습니다. 각 일괄 처리에는 해당 10MB에 맞을 수 있는 만큼의 레코드가 포함됩니다.

대부분의 경우 각 일괄 처리의 크기는 지정한 수보다 약간 더 큽니다. 일괄 처리에 부분 레코드를 포함할 수 없기 때문입니다. 일괄 처리의 마지막 레코드가 임계값 종료 전에 시작되면 일괄 처리가 더 커져서 전체 레코드를 포함할 수 있습니다. 마지막 일괄 처리의 크기는 지정한 크기보다 작을 수 있습니다.

비고

split_size 10MB 이상이어야 합니다(10485760).

참고하십시오