Примечание
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
Ускорение запросов поддерживает язык, подобный 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).