SQLリファレンス
SHOW TABLESは、アカウント上のテーブルを一覧表示するために使用できます。テーブル名は、ワーカーのバインディングを設定する際にdatasetとして指定した名前です(詳細についてはWorkers Analytics Engineの始め方を参照してください)。テーブルは、ワーカーにイベントデータを書き込むと自動的に作成されます。
SHOW TABLES[FORMAT <format>]利用可能なFORMATオプションについては、FORMAT句を参照してください。
SHOW TIMEZONESは、SQL APIがサポートするすべてのタイムゾーンを一覧表示するために使用できます。最も一般的なタイムゾーンがサポートされています。
SHOW TIMEZONES[FORMAT <format>]SHOW TIMEZONEは、SQL APIで使用されている現在のデフォルトタイムゾーンを返します。これは常にEtc/UTCであるべきです。
SHOW TIMEZONE[FORMAT <format>]SELECTは、テーブルをクエリするために使用されます。
使用法:
SELECT <expression_list>[FROM <table>|(<subquery>)][WHERE <expression>][GROUP BY <expression>, ...][ORDER BY <expression_list>][LIMIT <n>|ALL][FORMAT <format>]各句の構文は以下の通りです。いくつかの例のクエリについては、SQL APIドキュメントを参照してください。
SELECT句は、結果に含める列のリストを指定します。
列はASキーワードを使用してエイリアスを付けることができます。
使用法:
SELECT <expression> [AS <alias>], ...例:
-- 名前付き列を返すSELECT blob2, double3
-- すべての列を返すSELECT *
-- 列により説明的な名前を付けるSELECT blob2 AS probe_name, double3 AS temperatureさらに、サポートされている関数や演算子を使用した式を列名の代わりに使用できます:
SELECT blob2 AS probe_name, double3 AS temp_c, double3*1.8+32 AS temp_f -- 値を計算する
SELECT blob2 AS probe_name, if(double3 <= 0, 'FREEZING', 'NOT FREEZING') AS description -- 関数の使用
SELECT blob2 AS probe_name, avg(double3) AS avg_temp -- 集約関数FROMは、クエリのデータのソースを指定するために使用されます。
使用法:
FROM <table_name>|(subquery)例:
-- "temperatures"というワーカーのデータセットに書き込まれたデータをクエリするFROM temperatures
-- サブクエリを使用してテーブルを操作するFROM ( SELECT blob1 AS probe_name, count() as num_readings FROM temperatures GROUP BY probe_name)クエリは単一のテーブルでのみ操作できることに注意してください。UNION、JOINなどは現在サポートされていません。
WHEREは、クエリによって返される行をフィルタリングするために使用されます。
使用法:
WHERE <condition><condition>は、真偽値に評価される任意の式です。
比較演算子を使用して値を比較し、論理演算子を使用して条件を組み合わせることができます。
例:
-- 単純な比較WHERE blob1 = 'test'WHERE double1 = 4
-- 不等式WHERE double1 > 4
-- 演算子の使用(サポートされている演算子のリストは下記参照)WHERE double1 + double2 > 4WHERE blob1 = 'test1' OR blob2 = 'test2'
-- 不等式、関数、演算子を使用した式WHERE if(unit = 'f', (temp-32)/1.8, temp) <= 0集約関数を使用する場合、GROUP BYは集約が実行されるグループを指定します。
使用法:
GROUP BY <expression>, ...例えば、温度測定のテーブルがある場合:
-- 各プローブの平均温度を返すSELECT blob1 AS probe_name, avg(double1) AS average_tempFROM temperature_readingsGROUP BY probe_name通常、<expression>は単に列名であることができますが、ここに複雑な式を提供することも可能です。複数の式や列名をカンマで区切って提供できます。
ORDER BYは、行が返される順序を制御するために使用できます。
使用法:
ORDER BY <expression> [ASC|DESC], ...<expression>は単に列名であることができます。
ASCまたはDESCは、順序が昇順か降順かを決定します。ASCがデフォルトであり、省略可能です。
例:
-- double2、次にdouble3で、両方とも昇順で並べるORDER BY double2, double3
-- double2を昇順で並べ、その後double3を降順で並べるORDER BY double2, double3 DESCLIMITは、返される最大行数を指定します。
使用法:
LIMIT <n>|ALL返される最大行数を指定するか、制限なしの場合はALLを指定します。
例えば:
LIMIT 10 -- 最大10行を返すFORMATは、返されるデータのエンコード方法を制御します。
使用法:
FORMAT [JSON|JSONEachRow|TabSeparated]フォーマット句が含まれていない場合、デフォルトのフォーマットはJSONが使用されます。
デフォルトをオーバーライドするには、フォーマットを設定します。例えば:
FORMAT JSONEachRow以下のフォーマットがサポートされています:
データは、スキーマデータを含む単一のJSONオブジェクトとして返されます:
{ "meta": [ { "name": "<column 1 name>", "type": "<column 1 type>" }, { "name": "<column 2 name>", "type": "<column 2 type>" }, ... ], "data": [ { "<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>", ... }, { "<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>", ... }, ... ], "rows": 10}データは、各行ごとに別々のJSONオブジェクトとして返されます。行は改行で区切られ、ヘッダー行やスキーマデータはありません:
{"<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>"}{"<column 1 name>": "<column 1 value>", "<column 2 name>": "<column 2 value>"}...データは、改行で区切られた行として返されます。列はタブで区切られます。ヘッダーはありません。
column 1 value column 2 valuecolumn 1 value column 2 value...使用法:
count()count(DISTINCT column_name)Countは、各グループまたは結果セット内の行数を返す集約関数です。
Countは、各列内の異なる(ユニークな)値の数をカウントするためにも使用できます。
例:
-- 行の総数を返すcount()-- 列内の異なる値の数を返すcount(DISTINCT column_name)使用法:
sum([DISTINCT] column_name)Sumは、各グループまたは結果セット内のすべての行の列値の合計を返す集約関数です。SumはDISTINCTもサポートしますが、この場合は列内のユニークな値のみを合計します。
例:
-- すべてのアイテムの総コストを返すsum(item_cost)-- すべてのユニークなアイテムコストの合計を返すsum(DISTINCT item_cost)使用法:
avg([DISTINCT] column_name)Avgは、各グループまたは結果セット内のすべての行の列値の平均を返す集約関数です。AvgはDISTINCTもサポートしますが、この場合は列内のユニークな値のみを平均します。
例:
-- アイテムコストの平均を返すavg(item_cost)-- ユニークなアイテムコストの平均を返すavg(DISTINCT item_cost)使用法:
min(column_name)Minは、すべての行の列の最小値を返す集約関数です。
例:
-- アイテムコストの最小値を返すmin(item_cost)使用法:
max(column_name)Maxは、すべての行の列の最大値を返す集約関数です。
例:
-- アイテムコストの最大値を返すmax(item_cost)使用法:
quantileWeighted(q, column_name, weight_column_name)quantileWeightedは、各グループまたは結果セット内の指定された列のqth分位数の値を返す集約関数です。各行はweight_column_nameの値によって重み付けされます。通常、これは_sample_intervalになります(詳細についてはサンプリングの仕組みを参照してください)。
例:
-- <double1>の中央値を推定するquantileWeighted(0.5, double1, _sample_interval)
-- クエリ時間のテーブルで、95パーセンタイルのクエリ時間を推定するquantileWeighted(0.95, query_time, _sample_interval)使用法:
if(<condition>, <true_expression>, <false_expression>)<condition>が真である場合は<true_expression>を返し、そうでない場合は<false_expression>を返します。
例:
if(temp > 20, '暖かいです', 'ジャンパーを持ってきてください')使用法:
intDiv(a, b)aをbで割り、答えを最も近い整数に切り下げます。
使用法:
toUInt32(<expression>)任意の数値式、または小数の文字列表現を結果として持つ式を符号なし32ビット整数に変換します。
負の数に対する動作は未定義です。
使用法:
length({string})文字列の長さを返します。この関数はUTF-8に対応しています。
例:
SELECT length('文字列') AS s;SELECT length(blob1) AS s FROM your_dataset;使用法:
isEmpty({string})文字列が空であるかどうかを示す真偽値を返します。この計算は、バイナリ操作としても行うことができます: {string} = ''。
例:
SELECT isEmpty('文字列') AS b;SELECT isEmpty(blob1) AS b FROM your_dataset;使用法:
toLower({string})文字列を小文字に変換して返します。この関数はUnicodeに対応しています。すべての言語に対して完璧ではない場合があり、厳密なニーズを持つユーザーは、自分のコードで操作を行うべきです。
例:
SELECT toLower('大文字を小文字に') AS s;SELECT toLower(blob1) AS s FROM your_dataset;使用法:
toUpper({string})文字列を大文字に変換して返します。この関数はUnicodeに対応しています。結果はすべての言語に対して完璧ではない場合があり、厳密なニーズを持つユーザーは、自分のコードで操作を行うべきです。
例:
SELECT toUpper('小文字を大文字に') AS s;SELECT toUpper(blob1) AS s FROM your_dataset;使用法:
startsWith({string}, {string})最初の文字列が2番目の文字列で始まるかどうかの真偽値を返します。
例:
SELECT startsWith('接頭辞 ...', '接頭辞') AS b;SELECT startsWith(blob1, '接頭辞') AS b FROM your_dataset;使用法:
endsWith({string}, {string})最初の文字列が2番目の文字列で終わるかどうかの真偽値を返します。
例:
SELECT endsWith('接頭辞 接尾辞', '接尾辞') AS b;SELECT endsWith(blob1, '接尾辞') AS b FROM your_dataset;使用法:
position({needle:string} IN {haystack:string})1つの文字列needleが別の文字列haystack内の位置を返します。SQLでは、インデックスは通常1から始まります。つまり、位置はneedleがhaystackの先頭にある場合は1を返します。文字列が見つからない場合は0を返します。
例:
SELECT position(':' IN 'hello: world') AS p;SELECT position(':' IN blob1) AS p FROM your_dataset;使用法:
substring({string}, {offset:integer}[. {length:integer}])文字列の一部を抽出し、オフセットで示されたUnicodeコードポイントから始め、要求された長さのコードポイントを返します。前述のように、SQLではインデックスは通常1から始まります。つまり、substringに提供されるオフセットは少なくとも1である必要があります。
例:
SELECT substring('hello world', 6) AS s;SELECT substring('hello: world', 1, position(':' IN 'hello: world')-1) AS s;使用法:
format({string}[, ...])この関数は、文字列、整数、浮動小数点数、日付時刻、間隔などのフォーマットをサポートしますが、NULLはサポートしていません。フォーマット文字列内のリテラル{および}文字はサポートされていません。
例:
SELECT format('blob1: {}', blob1) AS s FROM dataset;また、formatDateTimeも参照してください。
使用法:
toDateTime(<expression>[, 'timezone string'])toDateTimeは、式を日付時刻に変換します。この関数はISO 8601スタイルのタイムゾーンをサポートしていません。UTC以外の時間の場合は、2番目のオプション引数を使用してタイムゾーンを提供する必要があります。
例:
-- double1には秒単位のUnixタイムスタンプが含まれていますtoDateTime(double1)
-- blob1には'YYYY-MM-DD hh:mm:ss'形式の日付時刻が含まれていますtoDateTime(blob1)
-- リテラル値:toDateTime(355924804) -- UnixタイムスタンプtoDateTime('355924804') -- Unixタイムスタンプを含む文字列toDateTime('1981-04-12 12:00:04') -- 'YYYY-MM-DD hh:mm:ss'形式の日付時刻を含む文字列
-- ニューヨーク時間に相対的な日付を解釈するtoDateTime('2022-12-01 16:17:00', 'America/New_York')使用法:
now()現在の時間をDateTimeとして返します。
使用法:
toUnixTimestamp(<datetime>)toUnixTimestampは、日付時刻を整数のUnixタイムスタンプに変換します。
例:
-- 現在のUnixタイムスタンプを取得するtoUnixTimestamp(now())使用法:
formatDateTime(<datetime expression>, <format string>[, <timezone string>])formatDateTime は、提供されたフォーマット文字列に従って日付時刻を文字列として出力します。サポートされているフォーマットオプションのリストについては、ClickHouseのドキュメント ↗を参照してください。
例:
-- 現在のYYYY-MM-DDをUTCで出力formatDateTime(now(), '%Y-%m-%d')
-- 日付時刻のタイムゾーンでYYYY-MM-DDを出力formatDateTime(<a datetime with a timezone>, '%Y-%m-%d')formatDateTime(toDateTime('2022-12-01 16:17:00', 'America/New_York'), '%Y-%m-%d')
-- UTCでYYYY-MM-DDを出力formatDateTime(<a datetime with a timezone>, '%Y-%m-%d', 'Etc/UTC')formatDateTime(toDateTime('2022-12-01 16:17:00', 'America/New_York'), '%Y-%m-%d', 'Etc/UTC')使用法:
toStartOfInterval(<datetime>, INTERVAL '<n>' <unit>[, <timezone string>])toStartOfInterval は、提供された間隔の最も近いオフセットに日付時刻を切り下げます。これは、データを等しいサイズの時間範囲にグループ化するのに便利です。
例:
-- 現在の時間を最も近い15分に切り下げるtoStartOfInterval(now(), INTERVAL '15' MINUTE)
-- タイムスタンプを日単位に切り下げるtoStartOfInterval(timestamp, INTERVAL '1' DAY)
-- 各時間ウィンドウに記録されたデータポイントの数をカウントSELECT toStartOfInterval(timestamp, INTERVAL '1' HOUR) AS hour, sum(_sample_interval) AS countFROM your_datasetGROUP BY hourORDER BY hour ASC使用法:
extract(<time unit> from <datetime>)extract は、日付時刻から時間単位の整数を返します。YEAR、MONTH、DAY、HOUR、MINUTE、および SECOND をサポートしています。
例:
-- タイムスタンプから秒数を抽出(この例では15を返す)extract(SECOND from toDateTime('2022-06-06 11:30:15'))以下の演算子がサポートされています:
| 演算子 | 説明 |
|---|---|
+ | 加算 |
- | 減算 |
* | 乗算 |
/ | 除算 |
% | 剰余 |
| 演算子 | 説明 |
|---|---|
= | 等しい |
< | より小さい |
> | より大きい |
<= | 以下 |
>= | 以上 |
<> または != | 等しくない |
IN | 前の式の値がリストに含まれている場合は真column IN ('a', 'list', 'of', 'values') |
NOT IN | 前の式の値がリストに含まれていない場合は真column NOT IN ('a', 'list', 'of', 'values') |
また、値が包括的な範囲にあるかどうかを確認するために BETWEEN 演算子もサポートしています: a [NOT] BETWEEN b AND c。
| 演算子 | 説明 |
|---|---|
AND | ブール “AND”(両方が真の場合は真) |
OR | ブール “OR”(いずれか一方または両方が真の場合は真) |
NOT | ブール “NOT”(次の式が偽の場合は真、その逆もまた然り) |
| 演算子 | 説明 |
|---|---|
- | 否定演算子(例: -42) |
| 型 | 構文 |
|---|---|
| 整数 | 42, -42 |
| 倍精度浮動小数点 | 4.2, -4.2 |
| 文字列 | 'so long and thanks for all the fish' |
| ブール | true または false |
| 時間間隔 | INTERVAL '42' DAYYEAR、MONTH、DAY、HOUR、MINUTE、および SECOND の間隔がサポートされています |