クエリ アクセラレーション SQL 言語リファレンスQuery acceleration SQL language reference

クエリ アクセラレーションでは、BLOB コンテンツに対するクエリを表現するための ANSI SQL に似た言語をサポートしています。Query acceleration supports an ANSI SQL-like language for expressing queries over blob contents. クエリ アクセラレーション SQL 言語は ANSI SQL のサブセットであり、サポートされるデータ型、演算子などのセットは限定されていますが、JSON などの階層型の半構造化データ形式に対するクエリをサポートするために、ANSI SQL を拡張している部分もあります。The query acceleration SQL dialect is a subset of ANSI SQL, with a limited set of supported data types, operators, etc., but it also expands on ANSI SQL to support queries over hierarchical semi-structured data formats such as JSON.

SELECT 構文SELECT Syntax

クエリ アクセラレーションでサポートされている唯一の SQL ステートメントは、SELECT ステートメントです。The only SQL statement supported by query acceleration is the SELECT statement. この例では、式で true が返されるすべての行を返します。This example returns every row for which expression returns true.

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

CSV 形式のデータの場合、tableBlobStorage である必要があります。For CSV-formatted data, table must be BlobStorage. つまり、REST 呼び出しで指定されたどの BLOB に対してもクエリが実行されます。This means that the query will run against whichever blob was specified in the REST call. JSON 形式のデータの場合、table は "テーブル記述子" です。For JSON-formatted data, table is a "table descriptor." この記事の「テーブル記述子」セクションを参照してください。See the Table Descriptors section of this article.

次の例では、WHERE expression によって true が返される行ごとに、このステートメントが各プロジェクション式の評価によって作成される新しい行を返します。In the following example, for each row for which the WHERE expression returns true, this statement will return a new row that is made from evaluating each of the projection expressions.

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

次の例では、expression によって true が返される行それぞれでの集計計算 (例: 特定の列の平均値) が返されます。The following example returns an aggregate computation (For example: the average value of a particular column) over each of the rows for which expression returns true.

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

次の例では、CSV 形式の BLOB の分割に適切なオフセットが返されます。The following example returns suitable offsets for splitting a CSV-formatted blob. この記事の「Sys.Split」セクションを参照してください。See the Sys.Split section of this article.

SELECT sys.split(split_size)FROM BlobStorage

データ型Data Types

データ型Data Type 説明Description
INTINT 64 ビット符号付き整数64-bit signed integer.
FLOATFLOAT 64 ビット ("倍精度") 浮動小数点。64-bit ("double-precision") floating point.
STRINGSTRING 可変長 Unicode 文字列。Variable-length Unicode string.
timestampTIMESTAMP 特定の時点。A point in time.
BOOLEANBOOLEAN true または falseTrue or false.

CSV 形式のデータから値を読み取ると、すべての値が文字列として読み取られます。When reading values from CSV-formatted data, all values are read as strings. 文字列値は、キャスト式を使用して他の型に変換される場合があります。String values may be converted to other types using CAST expressions. 値は、コンテキストに応じて、暗黙的に他の型にキャストされる場合があります。Values may be implicitly cast to other types depending on context. 詳細については、「データ型の優先順位 (Transact-SQL)」を参照してください。for more info, see Data type precedence (Transact-SQL).

Expressions

フィールドの参照Referencing fields

JSON 形式のデータ、またはヘッダー行を含む CSV 形式のデータの場合は、フィールドは名前で参照できます。For JSON-formatted data, or CSV-formatted data with a header row, fields may be referenced by name. フィールド名は、引用符で囲んでも囲まなくてもかまいません。Field names can be quoted or unquoted. フィールド名を引用符で囲む場合は、二重引用符 (") で囲み、スペースを含めることができます。また、大文字と小文字が区別されます。Quoted field names are enclosed in double-quote characters ("), may contain spaces, and are case-sensitive. フィールド名を引用符で囲まない場合は、大文字と小文字が区別されず、特殊文字を含めることもできません。Unquoted field names are case-insensitive, and may not contain any special characters.

また、CSV 形式のデータでは、アンダースコア () 文字を先頭に付けた序数によってフィールドを参照することもできます。In CSV-formatted data, fields may also be referenced by ordinal, prefixed with an underscore () character. たとえば、最初のフィールドは _1 として参照し、11 番目のフィールドは _11 として参照することができます。For example, the first field may be referenced as _1, or the eleventh field may be referenced as _11. 序数によるフィールドの参照は、ヘッダー行を含まない CSV 形式のデータに役立ちます。この場合、特定のフィールドを参照する唯一の方法は、序数によるものです。Referencing fields by ordinal is useful for CSV-formatted data that does not contain a header row, in which case the only way to reference a particular field is by ordinal.

オペレーターOperators

次の標準の SQL 演算子がサポートされています。The following standard SQL operators are supported:

演算子Operator 説明Description
= 2 つの式の等価性を比較します (比較演算子)。Compares the equality of two expressions (a comparison operator).
!=!= 一方の式がもう一方の式と等しくないかどうかをテストします (比較演算子)。Tests whether one expression is not equal to another expression (a comparison operator).
<> 2 つの式を比較して "等しくない" かどうかを判定します (比較演算子)。Compares two expressions for not equal to (a comparison operator).
< 2 つの式を比較して "より小さい" かどうかを判定します (比較演算子)。Compares two expressions for lesser than (a comparison operator).
<= 2 つの式を比較して "以下" であるかどうかを判定します (比較演算子)。Compares two expressions for lesser than or equal (a comparison operator).
> 2 つの式を比較して "より大きい" かどうかを判定します (比較演算子)。Compares two expressions for greater than (a comparison operator).
>= 2 つの式を比較して "以上" であるかどうかを判定します (比較演算子)。Compares two expressions for greater than or equal (a comparison operator).
+ 2 つの値を加算します。Adds two numbers. この加算算術演算子を使用して、日付に日数を加算することもできます。This addition arithmetic operator can also add a number, in days, to a date.
- 2 つの値で減算を行います (算術減算演算子)。Subtracts two numbers (an arithmetic subtraction operator).
/ 1 つの値を別の値で除算します (算術除算演算子)。Divides one number by another (an arithmetic division operator).
* 2 つの式を乗算します (算術乗算演算子)。Multiplies two expressions (an arithmetic multiplication operator).
% ある値を別の値で除算した結果の余りを返します。Returns the remainder of one number divided by another.
ANDAND 2 つの整数値の間でビットごとの論理積演算を実行します。Performs a bitwise logical AND operation between two integer values.
OROR Transact-SQL ステートメントの中で、バイナリ式に変換された 2 つの指定される整数値に対して、ビットごとの論理和演算を実行します。Performs a bitwise logical OR operation between two specified integer values as translated to binary expressions within Transact-SQL statements.
NOTNOT ブール値を否定します。Negates a Boolean input.
CASTCAST あるデータ型の式を別のデータ型に変換します。Converts an expression of one data type to another.
BETWEENBETWEEN テスト範囲を指定します。Specifies a range to test.
ININ 指定された値が、サブクエリまたは一覧内の値と一致するかどうかを判断します。Determines whether a specified value matches any value in a subquery or a list.
NULLIFNULLIF 指定された 2 つの式が等しい場合に NULL 値を返します。Returns a null value if the two specified expressions are equal.
COALESCECOALESCE 引数を順番に評価し、NULL と評価されない最初の式の現在の値を返します。Evaluates the arguments in order and returns the current value of the first expression that initially doesn't evaluate to NULL.

演算子の左右のデータ型が異なる場合は、こちらで指定されている規則に従って自動変換が実行されます: 「データ型の優先順位 (Transact-SQL)」。If data types on the left and right of an operator are different, then automatic conversion will be performed according to the rules specified here: Data type precedence (Transact-SQL).

クエリ アクセラレーション SQL 言語では、その記事で説明されているデータ型のごく一部のみがサポートされています。The query acceleration SQL language supports only a very small subset of the data types discussed in that article. この記事の「データ型」セクションを参照してください。See the Data Types section of this article.

キャストCasts

クエリ アクセラレーション SQL 言語では、こちらの規則に従って CAST 演算子がサポートされています: 「データ型の変換 (データベース エンジン)」。The query acceleration SQL language supports the CAST operator, according to the rules here: Data type conversion (Database Engine).

クエリ アクセラレーション SQL 言語では、その記事で説明されているデータ型の一部のみがサポートされています。The query acceleration SQL language supports only a tiny subset of the data types discussed in that article. この記事の「データ型」セクションを参照してください。See the Data Types section of this article.

文字列関数String functions

クエリ アクセラレーション SQL 言語では、以下の標準の SQL 文字列関数がサポートされています。The query acceleration SQL language supports the following standard SQL string functions:

機能Function 説明Description
CHAR_LENGTHCHAR_LENGTH 文字列式のデータ型が文字である場合は、文字列式の文字の長さを返します。それ以外の場合は、文字列式の長さをバイト単位 (ビット数を 8 で割った数より小さい最小の整数) で返しますReturns the length in characters of the string expression, if the string expression is of a character data type; otherwise, returns the length in bytes of the string expression (the smallest integer not less than the number of bits divided by 8). (この関数は CHARACTER_LENGTH 関数と同じです)。(This function is the same as the CHARACTER_LENGTH function.)
CHARACTER_LENGTHCHARACTER_LENGTH 文字列式のデータ型が文字である場合は、文字列式の文字の長さを返します。それ以外の場合は、文字列式の長さをバイト単位 (ビット数を 8 で割った数より小さい最小の整数) で返しますReturns the length in characters of the string expression, if the string expression is of a character data type; otherwise, returns the length in bytes of the string expression (the smallest integer not less than the number of bits divided by 8). (この関数は CHAR_LENGTH 関数と同じです)。(This function is the same as the CHAR_LENGTH function
LOWERLOWER 大文字のデータが小文字に変換された状態の文字式を返します。Returns a character expression after converting uppercase character data to lowercase.
UPPERUPPER 小文字データを大文字に変換して文字式を返します。Returns a character expression with lowercase character data converted to uppercase.
SUBSTRINGSUBSTRING SQL Server で、文字、バイナリ、テキスト、またはイメージ型の式の一部を返します。Returns part of a character, binary, text, or image expression in SQL Server.
TRIMTRIM 文字列の先頭と末尾にあるスペース文字 (32) または他の指定した文字を削除します。Removes the space character char(32) or other specified characters from the start and end of a string.
LEADINGLEADING 説明Description
TRAILINGTRAILING 説明Description

以下にいくつか例を示します。Here's a few examples:

機能Function Example 結果Result
CHARACTER_LENGTHCHARACTER_LENGTH SELECT CHARACTER_LENGTH('abcdefg') from BlobStorage 7
CHAR_LENGTHCHAR_LENGTH SELECT CHAR_LENGTH(_1) from BlobStorage 1
LOWERLOWER SELECT LOWER('AbCdEfG') from BlobStorage abcdefg
UPPERUPPER SELECT UPPER('AbCdEfG') from BlobStorage ABCDEFG
SUBSTRINGSUBSTRING SUBSTRING('123456789', 1, 5) 23456
TRIMTRIM TRIM(BOTH '123' FROM '1112211Microsoft22211122') Microsoft

データ関数Date functions

次の標準の SQL 日付関数がサポートされています。The following standard SQL date functions are supported:

DATE_ADD, DATE_DIFF, EXTRACT, TO_STRING, TO_TIMESTAMP.DATE_ADD, DATE_DIFF, EXTRACT, TO_STRING, TO_TIMESTAMP.

現在、標準 IS08601 の日付形式はすべて変換されます。Currently we convert all the date formats of standard IS08601.

DATE_ADD 関数DATE_ADD function

クエリ アクセラレーション SQL 言語では、DATE_ADD 関数で年、月、日、時間、分、秒をサポートしています。The query acceleration SQL language supports year, month, day, hour, minute, second for the DATE_ADD function.

例 :Examples:

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


#### DATE_DIFF function

The query acceleration SQL language supports year, month, day, hour, minute, second for the ``DATE_DIFF`` function.

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

EXTRACT 関数EXTRACT function

DATE_ADD 関数でサポートされている日付部分以外の EXTRACT の場合、クエリ アクセラレーション SQL 言語では、日付部分として timezone_hour と timezone_minute をサポートしています。For EXTRACT other than date part supported for the DATE_ADD function, the query acceleration SQL language supports timezone_hour and timezone_minute as date part.

例 :Examples:

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

TO_STRING 関数TO_STRING function

例 :Examples:

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

次の表では、TO_STRING 関数の出力形式を指定するために使用できる文字列について説明します。This table describes strings that you can use to specify the output format of the TO_STRING function.

[書式設定文字列]Format string 出力Output
yyyy 2 桁形式の年 - 1999 であれば "99"Year in 2 digit format – 1999 as '99'
yy 4 桁形式の年Year in 4 digit format
yyyyyyyy 4 桁形式の年Year in 4 digit format
MM 年の月 - 1Month of year – 1
mmMM 0 を埋め込んだ月 – 01Zero padded Month – 01
MMMMMM 省略形。Abbr. 年の月 - JANmonth of Year -JAN
MMMMMMMM 正式な月名 - MayFull month – May
dd 月の日 (1 から 31)Day of month (1-31)
dddd 0 を埋め込んだ月の日 (01 から 31)Zero padded day of Month (01-31)
aa AM または PMAM or PM
hh 日の時間 (1 から 12)Hour of day (1-12)
hhhh 0 を埋め込んだ日の時間 (01-12)Zero padded Hours od day (01-12)
HH 日の時間 (0 から 23)Hour of day (0-23)
HHHH 0 を埋め込んだ日の時間 (00 から 23)Zero Padded hour of Day (00-23)
mm 時間の分 (0-59)Minute of hour (0-59)
mmmm 0 を埋め込んだ分 (00 から 59)Zero padded minute (00-59)
ss 分の秒 (0 から 59)Second of Minutes (0-59)
ssss 0 を埋め込んだ秒 (00 から 59)Zero padded Seconds (00-59)
SS 秒の小数部分 (0.1 から 0.9)Fraction of Seconds (0.1-0.9)
SSSS 秒の小数部分 (0.01 から 0.99)Fraction of Seconds (0.01-0.99)
SSSSSS 秒の小数部分 (0.001 から 0.999)Fraction of Seconds (0.001-0.999)
XX 時間のオフセットOffset in Hours
XX または XXXXXX or XXXX 時間と分のオフセット (+0430)Offset in hours and minutes (+0430)
XXX または XXXXXXXX or XXXXX 時間と分のオフセット (-07:00)Offset in hours and minutes (-07:00)
xx 時間のオフセット (7)Offset in hours (7)
xx または xxxxxx or xxxx 時間と分のオフセット (+0530)Offset in hour and minute (+0530)
Xxx または xxxxxXxx or xxxxx 時間と分のオフセット (+05:30)Offset in hour and minute (+05:30)

TO_TIMESTAMP 関数TO_TIMESTAMP function

IS08601 形式のみがサポートされます。Only IS08601 formats are supported.

例 :Examples:

TO_TIMESTAMP(string)
TO_TIMESTAMP('2007T')

注意

UTCNOW 関数を使用して、システム時刻を取得することもできます。You can also use the UTCNOW function to get the system time.

集計式Aggregate Expressions

SELECT ステートメントには、1 つ以上のプロジェクション式または 1 つの集計式を含めることができます。A SELECT statement may contain either one or more projection expressions or a single aggregate expression. 次の集計式がサポートされています。The following aggregate expressions are supported:

Expression 説明Description
COUNT(*)COUNT(*) 述語式と一致したレコードの数を返します。Returns the number of records which matched the predicate expression.
COUNT(expression)COUNT(expression) 式が null 以外のレコードの数を返します。Returns the number of records for which expression is non-null.
AVERAGE(expression)AVERAGE(expression) 式の null 以外の値の平均を返します。Returns the average of the non-null values of expression.
MIN(expression)MIN(expression) 式の null 以外の最小値を返します。Returns the minimum non-null value of expression.
MAX(expression)MAX(expression 式の null 以外の最大値を返します。Returns the maximum non-null value of expression.
SUM(expression)SUM(expression) 式の null 以外のすべての値の合計を返します。Returns the sum of all non-null values of expression.

MISSINGMISSING

IS MISSING 演算子は、クエリ アクセラレーション SQL 言語でサポートされる唯一の非標準の演算子です。The IS MISSING operator is the only non-standard that the query acceleration SQL language supports. JSON データでは、特定の入力レコードにフィールドがない場合、IS MISSING 式フィールドはブール値 true に評価されます。For JSON data, if a field is missing from a particular input record, the expression field IS MISSING will evaluate to the Boolean value true.

テーブル記述子Table Descriptors

CSV データの場合、テーブル名は常に BlobStorage です。For CSV data, the table name is always BlobStorage. 次に例を示します。For example:

SELECT * FROM BlobStorage

JSON データの場合は、追加のオプションも使用できます。For JSON data, additional options are available:

SELECT * FROM BlobStorage[*].path

これにより、JSON データのサブセットに対するクエリが可能になります。This allows queries over subsets of the JSON data.

JSON クエリでは、FROM 句の中にパスを記述することができます。For JSON queries, you can mention the path in part of the FROM clause. これらのパスは、JSON データのサブセットを解析するのに役立ちます。These paths will help to parse the subset of JSON data. これらのパスは、JSON 配列およびオブジェクトの値を参照できます。These paths can reference to JSON Array and Object values.

それでは、この詳細を理解するために例を見てみましょう。Let's take an example to understand this in more detail.

これはサンプル データです。This is our sample data:

{
  "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 オブジェクトだけかもしれません。You might be interested only in the warehouses JSON object from the above data. warehouses オブジェクトは JSON 配列型であるため、FROM 句でこれを記述できます。The warehouses object is a JSON array type, so you can mention this in the FROM clause. サンプル クエリは、次のようになります。Your sample query can look something like this.

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

このクエリでは、すべてのフィールドを取得しますが、選択するのは緯度のみです。The query gets all fields but selects only the latitude.

dimensions JSON オブジェクト値のみにアクセスしたい場合は、クエリでそのオブジェクトを参照することができます。If you wanted to access only the dimensions JSON object value, you could use refer to that object in your query. 次に例を示します。For example:

SELECT length FROM BlobStorage[*].dimensions

これにより、アクセスは dimensions オブジェクトのメンバーに制限されます。This also limits your access to members of the dimensions object. JSON フィールドの他のメンバーや JSON オブジェクトの内部値にアクセスする場合は、次の例に示すようなクエリを使用します。If you want to access other members of JSON fields and inner values of JSON objects, then you might use a queries such as shown in the following example:

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

注意

BlobStorage と BlobStorage[*] はどちらも、オブジェクト全体を参照します。BlobStorage and BlobStorage[*] both refer to the whole object. ただし、FROM 句にパスを含めた場合は、BlobStorage[*].path を使用する必要があります。However, if you have a path in the FROM clause, then you'll need to use BlobStorage[*].path

Sys.SplitSys.Split

これは特殊な形式の SELECT ステートメントであり、CSV 形式のデータに対してのみ使用できます。This is a special form of the SELECT statement, which is available only for CSV-formatted data.

SELECT sys.split(split_size)FROM BlobStorage

このステートメントを使用するのは、CSV データ レコードを数回に分けてダウンロードして処理する場合です。Use this statement in cases where you want to download and then process CSV data records in batches. そうすることで、一度にすべてのレコードをダウンロードするのではなく、レコードを並列処理できます。That way you can process records in parallel instead of having to download all records at one time. このステートメントでは、CSV ファイルのレコードが返されません。This statement doesn't return records from the CSV file. 代わりに、バッチ サイズのコレクションが返されます。Instead, it returns a collection of batch sizes. その後、各バッチ サイズを使用して、データ レコードのバッチを取得できます。You can then use each batch size to retrieve a batch of data records.

各バッチに含めるバイト数を指定するには、split_size パラメーターを使用します。Use the split_size parameter to specify the number of bytes that you want each batch to contain. たとえば、一度に 10 MB のデータのみを処理する場合、ステートメントは SELECT sys.split(10485760)FROM BlobStorage のようになります。これは、10 MB が 10,485,760 バイトであるためです。For example, if you want to process only 10 MB of data at a time, you're statement would look like this: SELECT sys.split(10485760)FROM BlobStorage because 10 MB is equal to 10,485,760 bytes. 各バッチには、10 MB に収まる数だけのレコードが含まれます。Each batch will contain as many records as can fit into those 10 MB.

ほとんどの場合、各バッチのサイズは、指定した数よりも若干大きくなります。In most cases, the size of each batch will be slightly higher than the number that you specify. これは、バッチに部分的なレコードを含めることができないためです。That's because a batch cannot contain a partial record. しきい値の終わりになる前にバッチ内の最後のレコードが開始されると、レコード全体を含めることができるようにバッチが大きくなります。If the last record in a batch starts before the end of your threshold, the batch will be larger so that it can contain the complete record. 最後のバッチのサイズは、通常、指定したサイズよりも小さくなる可能性があります。The size of the last batch will likely be smaller than the size that you specify.

注意

split_size は、少なくとも 10 MB (10,485,760) である必要があります。The split_size must be at least 10 MB (10485760).

関連項目See also