Поделиться через


Справочник по языку SQL для ускорения запросов

Ускорение запросов поддерживает язык, подобный ANSI SQL, для выражения запросов по содержимому большого двоичного объекта. Диалект SQL ускорения запросов — это подмножество ANSI SQL с ограниченным набором поддерживаемых типов данных, операторов и т. д., но также расширяет возможности ANSI SQL для поддержки запросов по иерархическим полуструктурированных форматам данных, таким как JSON.

Синтаксис SELECT

Единственной инструкцией SQL, поддерживаемой ускорением запросов, является инструкция SELECT. В этом примере возвращается каждая строка, для которой выражение возвращает значение true.

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

Для данных в формате CSV таблица должна быть BlobStorage. Это означает, что запрос будет выполняться именно в том blob, который был указан в вызове REST. Для данных в формате 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]

В следующем примере возвращаются подходящие смещения для разделения BLOB в формате CSV. См. раздел Sys.Split этой статьи.

SELECT sys.split(split_size)FROM BlobStorage

Типы данных

Тип данных Описание
INT 64-разрядное целое число со знаком.
ФЛОАТ 64-разрядная ("двойная точность") с плавающей запятой.
СТРУНА Строка Юникода переменной длины.
TIMESTAMP Точка во времени.
Булевый Правда или ложь.

При чтении значений из данных в формате CSV все значения считываются как строки. Строковые значения могут быть преобразованы в другие типы с помощью выражений CAST. Значения могут неявно приводиться к другим типам в зависимости от контекста. Дополнительные сведения см. в разделе "Приоритет типов данных" (Transact-SQL).

Выражения

Ссылки на поля

Для данных в формате JSON или CSV-форматированных данных с строкой заголовка на поля можно ссылаться по имени. Имена полей можно процитировать или отменить. Имена полей обрамлены символами двойной кавычки ("), могут содержать пробелы и учитывать регистр. Неквотируемые имена полей регистронезависимы и не могут содержать специальные символы.

В данных в формате CSV на поля также можно ссылаться по порядковому номеру с использованием символа подчеркивания (_). Например, на первое поле можно ссылаться как на _1, а на одиннадцатое поле — как на _11. Ссылки на поля по порядковому номеру полезны для данных в формате CSV, которые не содержат строку заголовка, в этом случае единственным способом ссылки на определенное поле является порядковый номер.

Операторы

Поддерживаются следующие стандартные операторы SQL:

Оператор Описание
= Сравнивает равенство двух выражений (оператор сравнения).
!= Проверяет, не равно ли одно выражение другому выражению (оператор сравнения).
<> Сравнивает два выражения на неравенство (оператор сравнения).
< Сравнивает два выражения на предмет того, меньше ли одно другого (оператор сравнений).
<= Сравнивает два выражения на меньше или равно по значению (оператор сравнения).
> Сравнивает два выражения на большее (оператор сравнения).
>= Сравнивает два выражения на больше или равно (оператор сравнения).
+ Добавляет два числа. Этот оператор сложения также может прибавить определенное количество дней к дате.
- Вычитает два числа (арифметический оператор вычитания).
/ Делит одно число на другое (арифметический оператор деления).
* Умножает два выражения (оператор арифметического умножения).
% Возвращает оставшуюся часть одного числа, разделенного на другое.
AND Выполняет побитовую логическую операцию AND между двумя целыми значениями.
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
LOWER Возвращает символьное выражение после преобразования символьных данных верхнего регистра в строчный регистр.
UPPER Возвращает символьное выражение со строчными символьными данными, преобразованными в верхний регистр.
ПОДСТРОКА Возвращает часть символа, двоичного, текстового или изображения в SQL Server.
TRIM Удаляет символ пробела (32) или другие указанные символы из начала и конца строки.
ведущий Удаляет символ пробела (32) или другие указанные символы из начала строки.
Отставание Удаляет символ пробела (32) или другие указанные символы из конца строки.

Ниже приведены несколько примеров.

Функция Пример Результат
ДЛИНА_СТРОКИ SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTH 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 TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

Функции работы с датами

Поддерживаются следующие стандартные функции дат SQL:

  • DATE_ADD
  • DATE_DIFF
  • EXTRACT
  • TO_STRING
  • TO_TIMESTAMP

В настоящее время преобразуются все форматы дат стандарта ISO 8601.

функция 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, язык 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 цифр - 1999 как "99"
y Год в формате 4 цифр
yyyy Год в формате 4 цифр
M Месяц года - 1
MM Месяц с нулевым заполнением - 01
MMM Сокращенный месяц года - JAN
ММММ Полный месяц - май
d День месяца (1-31)
dd Нулевой заполненный день месяца (01-31)
а AM или PM
х Час дня (1-12)
hh Ноль заполненных часов дня (01-12)
Х Час дня (0-23)
HH Нулевой час дня (00-23)
m Минута часа (0-59)
мм Ноль заполненная минута (00-59)
s Секунда в минуте (0-59)
ss Нулевая заполненная секунда (00–59)
С Доля секунд (0,1-0,9)
SS Доля секунд (0,01-0,99)
SSS Доля секунд (0,001-0,999)
X Смещение в часах
XX или XXXX Смещение в часах и минутах (+0430)
XXX или XXXXX Смещение в часах и минутах (-07:00)
x Смещение в часах (7)
xx или xxxx Смещение в час и минуту (+0530)
Xxx или xxxxxx Смещение в час и минуту (+05:30)

функция TO_TIMESTAMP

Поддерживаются только IS08601 форматы.

Примеры:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

Примечание.

Вы также можете использовать функцию UTCNOW для получения системного времени.

Агрегатные выражения

Инструкция SELECT может содержать одно или несколько выражений проекции или одно статистическое выражение. Поддерживаются следующие статистические выражения:

Выражение Описание
COUNT(*) Возвращает количество записей, соответствующих выражению предиката.
COUNT(expression) Возвращает количество записей, для которых выражение не равно NULL.
AVG(expression) Возвращает среднее значение выражения, отличное от NULL.
MIN(expression) Возвращает минимальное непустое значение выражения.
MAX(expression Возвращает максимальное значение выражения, отличное от NULL.
SUM(expression) Возвращает сумму всех непустых значений выражения.

ОТСУТСТВУЕТ

Оператор IS MISSING является единственным нестандартом, поддерживаемым языком SQL ускорения запросов. Для данных JSON, если поле отсутствует в конкретной входной записи, поле IS MISSING выражения будет принимать логическое значение истина.

Дескрипторы таблиц

Для данных 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 из приведенных выше данных. Объект является типом массива JSON, поэтому его warehouses можно упомянуть в предложении 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

Это специальная форма инструкции SELECT, которая доступна только для данных в формате CSV.

SELECT sys.split(split_size) FROM BlobStorage

Используйте эту инструкцию в случаях, когда вы хотите скачать и обработать записи данных CSV в пакетах. Таким образом можно параллельно обрабатывать записи вместо необходимости одновременно скачивать все записи. Эта инструкция не возвращает записи из CSV-файла. Вместо этого он возвращает коллекцию размеров партии. Затем можно использовать каждый размер партии для извлечения партии записей данных.

Используйте параметр split_size , чтобы указать количество байтов, которые требуется содержать каждый пакет. Например, если вы хотите обрабатывать только 10 МБ данных за раз, ваше заявление будет выглядеть следующим образом: SELECT sys.split(10485760)FROM BlobStorage поскольку 10 МБ равно 10 485 760 байтам. Каждый пакет будет содержать столько записей, сколько можно вписать в эти 10 МБ.

В большинстве случаев размер каждого пакета будет немного выше указанного числа. Это связано с тем, что пакет не может содержать частичную запись. Если последняя запись в пакете начинается до конца порогового значения, пакет будет больше, чтобы он смог содержать полную запись. Размер последнего пакета, скорее всего, будет меньше указанного размера.

Примечание.

Split_size должно быть не менее 10 МБ (10485760).

См. также