次で利用可能:
DDSQL エディター
|
ノートブック
概要 DDSQL は Datadog データ用の SQL です。SELECT などの標準の SQL 操作をいくつか実装しており、非構造化データに対するクエリを可能にします。独自の SELECT ステートメントを記述して必要なデータを正確に取得する、タグを標準のテーブル列と同様にクエリするといったアクションを実行できます。
DDSQL クエリは、Datadog MCP サーバー ddsql ツールセットを使用して、AI エージェントから実行できます (プレビュー)。
このドキュメントでは、次のような利用可能な SQL サポートについて紹介します。
構文 次の SQL 構文がサポートされています。
SELECT (DISTINCT) (DISTINCT: オプション)データベースから行を取得し、DISTINCT を指定して重複レコードを除外します。
Copy
SELECT DISTINCT customer_id
FROM orders JOIN複数のテーブル間の関連する列に基づいて、それらのテーブルの行を結合します。FULL JOIN、INNER JOIN、LEFT JOIN、RIGHT JOIN がサポートされます。
Copy
SELECT orders . order_id , customers . customer_name
FROM orders
JOIN customers
ON orders . customer_id = customers . customer_id GROUP BY指定された列に同じ値を持つ行をグループ化して、要約行を生成します。
Copy
SELECT product_id , SUM ( quantity )
FROM sales
GROUP BY product_id || (concat)複数の文字列を連結します。
Copy
SELECT first_name || ' ' || last_name AS full_name
FROM employees WHERE (LIKE、IN、ON、OR フィルターのサポートを含む)指定された条件を満たすレコードをフィルタリングします。
Copy
SELECT *
FROM employees
WHERE department = 'Sales' AND name LIKE 'J%' CASE指定された条件に基づいて異なる値を返す条件ロジックを提供します。
Copy
SELECT order_id ,
CASE
WHEN quantity > 10 THEN 'Bulk Order'
ELSE 'Standard Order'
END AS order_type
FROM orders WINDOW現在の行に関連するテーブル行のセットに対して計算を実行します。
Copy
SELECT
timestamp ,
service_name ,
cpu_usage_percent ,
AVG ( cpu_usage_percent ) OVER ( PARTITION BY service_name ORDER BY timestamp ROWS BETWEEN 2 PRECEDING AND CURRENT ROW ) AS moving_avg_cpu
FROM
cpu_usage_data IS NULL / IS NOT NULL値が null であるか、null でないかをチェックします。
Copy
SELECT *
FROM orders
WHERE delivery_date IS NULL LIMIT返されるレコードの最大数を指定します。
Copy
SELECT *
FROM customers
LIMIT 10 OFFSET指定された数のレコードをスキップしてから、クエリからレコードを返し始めます。
Copy
SELECT *
FROM employees
OFFSET 20 ORDER BYクエリの結果セットを 1 つ以上の列でソートします。ソート順には ASC、DESC を使用できます。
Copy
SELECT *
FROM sales
ORDER BY sale_date DESC HAVINGグループ化後に指定された条件を満たすレコードをフィルタリングします。
Copy
SELECT product_id , SUM ( quantity )
FROM sales
GROUP BY product_id
HAVING SUM ( quantity ) > 10 IN、ON、ORクエリの指定条件で使用されます。WHERE 句と JOIN 句で利用できます。
Copy
SELECT *
FROM orders
WHERE order_status IN ( 'Shipped' , 'Pending' ) USINGこの句は、両方のテーブルで結合列の名前が同じである場合の結合の省略形です。それらの列のカンマ区切りリストを取得し、一致するペアごとに別の等号条件を作成します。たとえば、T1 と T2 を USING (a, b) で結合することは、ON T1.a = T2.a AND T1.b = T2.b と同等です。
Copy
SELECT orders . order_id , customers . customer_name
FROM orders
JOIN customers
USING ( customer_id ) AS列またはテーブルの名前をエイリアスに変更します。
Copy
SELECT first_name AS name
FROM employees 算術演算 +、-、*、/ のような演算子を使用して基本的な計算を行います。
Copy
SELECT price , tax , ( price * tax ) AS total_cost
FROM products INTERVAL value unit特定の単位で指定された期間を表す間隔。
サポートされている単位は、次のとおりです。 - milliseconds / millisecond - seconds / second - minutes / minute - hours / hour - days / day データ型 DDSQL では、以下のデータ型がサポートされます。
データ型 説明 BIGINT64 ビット符号付き整数。 BOOLEANtrue または false の値。DECIMAL浮動小数点数。 INETネットワークアドレスの値 (IPv4 および IPv6、オプションで CIDR プレフィックス長)。 INTERVAL期間の値。 JSONJSON データ。 TIMESTAMP日付と時刻の値。 VARCHAR可変長文字列。
配列型 すべてのデータ型で配列型がサポートされます。配列リテラル、要素アクセス、および配列関数については、Arrays を参照してください。
型リテラル DDSQL では、[TYPE] [value] 構文を使用して明示的な型リテラルをサポートしています。
型 構文 例 BIGINTBIGINT 'value'BIGINT '1234567'BOOLEANBOOLEAN 'value'BOOLEAN 'true'DECIMALDECIMAL 'value'DECIMAL '3.14159'INETINET 'value'INET '192.168.1.5/24'INTERVALINTERVAL 'value unit'INTERVAL '30 minutes'JSONJSON 'value'JSON '{"key": "value", "count": 42}'TIMESTAMPTIMESTAMP 'value'TIMESTAMP '2023-12-25 10:30:00'VARCHARVARCHAR 'value'VARCHAR 'hello world'
型のプレフィックスは省略可能です。その場合、型は値から自動的に推測されます。たとえば、'hello world' は VARCHAR であると推測され、123 は BIGINT、true は BOOLEAN であると推測されます。値が曖昧になる可能性がある場合は、明示的な型プレフィックスを使用してください。たとえば、TIMESTAMP '2025-01-01' はプレフィックスがない場合、VARCHAR であると推測されます。
例
Copy
-- Using type literals in queries
SELECT
VARCHAR 'Product Name: ' || name AS labeled_name ,
price * DECIMAL '1.08' AS price_with_tax ,
created_at + INTERVAL '7 days' AS expiry_date
FROM products
WHERE created_at > TIMESTAMP '2025-01-01' ; 配列 配列は、すべて同じデータ型を共有する値の順序付きコレクションです。すべての DDSQL 基本型に、対応する配列型があります。
配列リテラル 配列リテラルを作成するには、ARRAY[value1, value2, ...] 構文を使用します。配列の型は、値から自動的に推測されます。
Copy
SELECT ARRAY [ 'apple' , 'banana' , 'cherry' ] AS fruits ; -- VARCHAR array
SELECT ARRAY [ 1 , 2 , 3 ] AS numbers ; -- BIGINT array
SELECT ARRAY [ true , false , true ] AS flags ; -- BOOLEAN array
SELECT ARRAY [ 1 . 1 , 2 . 2 , 3 . 3 ] AS decimals ; -- DECIMAL array 要素アクセス 1 ベースの添字を使用して、個々の配列要素にアクセスします。範囲外のインデックスにアクセスすると、NULL が返されます。
Copy
SELECT ARRAY [ 'a' , 'b' , 'c' ][ 1 ]; -- Returns 'a'
SELECT ARRAY [ 'a' , 'b' , 'c' ][ 2 ]; -- Returns 'b'
SELECT ARRAY [ 'a' , 'b' , 'c' ][ 10 ]; -- Returns NULL (out of bounds) 配列の列の要素にアクセスするには、同じ添字構文を使用します。
Copy
SELECT recipients [ 1 ] AS first_recipient
FROM emails 配列関数 次の関数は配列に対して操作を行います。
関数 戻り値の型 説明 CARDINALITY(array a)BIGINT配列内の要素の数を返します。 ARRAY_POSITION(array a, typeof_array value)BIGINT配列内で最初に出現した value の 1 ベースのインデックスを返します。見つからない場合は NULL を返します。 STRING_TO_ARRAY(string s, string delimiter)VARCHAR[]指定された区切り文字で、文字列を文字列の配列に分割します。 ARRAY_TO_STRING(array a, string delimiter)VARCHAR指定された区切り文字で、配列の要素を文字列に結合します。 ARRAY_AGG(expression e)入力の配列の型 複数の行からの値を 1 つの配列に集約します。 UNNEST(array a [, array b...])[, b…] の行 1 つ以上の配列を行のセットに展開します。FROM 句内でのみ有効です。
CARDINALITY
Copy
SELECT
CARDINALITY ( recipients ) AS recipient_count
FROM
emails ARRAY_POSITION
Copy
SELECT
ARRAY_POSITION ( recipients , 'hello@example.com' ) AS position
FROM
emails STRING_TO_ARRAY
Copy
SELECT
STRING_TO_ARRAY ( 'a,b,c,d,e,f' , ',' ) AS parts ARRAY_TO_STRING
Copy
SELECT
ARRAY_TO_STRING ( ARRAY [ 'a' , 'b' , 'c' ], ',' ) AS joined_string ARRAY_AGG
Copy
SELECT
sender ,
ARRAY_AGG ( subject ) AS subjects ,
ARRAY_AGG ( DISTINCT subject ) AS distinct_subjects
FROM
emails
GROUP BY
sender UNNEST
Copy
SELECT
sender ,
recipient
FROM
emails ,
UNNEST ( recipients ) AS recipient 関数 次の SQL 関数がサポートされています。ウィンドウ関数については、このドキュメントの別の Window function セクションを参照してください。
関数 戻り値の型 説明 MIN(variable v)v の型 データセット内の最小値を返します。 MAX(variable v)v の型 すべての入力値の中で最大の値を返します。 COUNT(any a)数値 null でない入力値の数を返します。 SUM(numeric n)数値 すべての入力値の合計を返します。 AVG(numeric n)数値 すべての入力値の平均値 (算術平均) を返します。 BOOL_AND(boolean b)ブール値 すべての非 null 入力値が true であるかどうかを返します。 BOOL_OR(boolean b)ブール値 いずれかの非 null 入力値が true であるかどうかを返します。 CEIL(numeric n) / CEILING(numeric n)数値 最も近い整数に切り上げられた値を返します。CEIL と CEILING はいずれもエイリアスとしてサポートされています。 FLOOR(numeric n)数値 最も近い整数に切り下げられた値を返します。 ROUND(numeric n)数値 最も近い整数に丸められた値を返します。 POWER(numeric base, numeric exponent)数値 指数でべき乗する底の値を返します。 LOWER(string s)文字列 小文字の文字列を返します。 UPPER(string s)文字列 大文字の文字列を返します。 ABS(numeric n)数値 絶対値を返します。 COALESCE(args a)最初の非 null の型または null 最初の非 null 値またはすべて null の場合は null を返します。 CAST(value AS type)型 指定の値を指定されたデータ型に変換します。 LENGTH(string s)整数 文字列の文字数を返します。 TRIM(string s)文字列 文字列の先頭と末尾の空白を削除します。 REPLACE(string s, string from, string to)文字列 文字列内の部分文字列の出現を別の部分文字列で置き換えます。 SUBSTRING(string s, int start, int length)文字列 指定された位置から開始する、指定された長さの部分文字列を文字列から抽出します。 REVERSE(string s)文字列 文字列の文字の順序を逆にして返します。 STRPOS(string s, string substring)整数 指定された文字列内の部分文字列の最初のインデックス位置を返します。一致がない場合は 0 を返します。 SPLIT_PART(string s, string delimiter, integer index)文字列 指定された区切り文字で文字列を分割し、1 から数えて指定された位置の文字列を返します。 EXTRACT(unit from timestamp/interval)数値 タイムスタンプまたは間隔から日付または時間フィールドの一部 (年や月など) を抽出します。 TO_TIMESTAMP(string timestamp, string format)タイムスタンプ 指定された形式に従って文字列をタイムスタンプに変換します。 TO_TIMESTAMP(numeric epoch)タイムスタンプ UNIX エポックタイムスタンプ (秒単位) をタイムスタンプに変換します。 TO_CHAR(timestamp t, string format)文字列 指定された形式に従ってタイムスタンプを文字列に変換します。 DATE_BIN(interval stride, timestamp source, timestamp origin)タイムスタンプ タイムスタンプ (ソース) を均等な長さのバケット (ストライド) に合わせて整列させます。ソースを含むバケットの開始を返します。これは、原点からストライドの長さの倍数の位置にある、ソース以下の最大のタイムスタンプとして計算されます。 DATE_TRUNC(string unit, timestamp t)タイムスタンプ 指定された単位に基づいて、タイムスタンプを指定された精度に切り捨てます。 CURRENT_SETTING(string setting_name)文字列 指定された設定の現在の値を返します。パラメーター dd.time_frame_start と dd.time_frame_end がサポートされており、それぞれグローバルな時間枠の開始と終了を返します。 NOW()タイムスタンプ 現在のクエリの開始時点における現在の UTC タイムスタンプを返します。 CARDINALITY(array a)整数 配列内の要素の数を返します。 ARRAY_POSITION(array a, typeof_array value)整数 配列内で見つかった値の最初の出現のインデックスを返します。値が見つからない場合は null を返します。 STRING_TO_ARRAY(string s, string delimiter)文字列の配列 指定された区切り文字を使用して、指定された文字列を文字列の配列に分割します。 ARRAY_TO_STRING(array a, string delimiter)文字列 指定された区切り文字で要素を連結して、配列を文字列に変換します。 ARRAY_AGG(expression e)入力の配列の型 すべての入力値を収集して配列を作成します。 APPROX_PERCENTILE(double percentile) WITHIN GROUP (ORDER BY expression e)式の型 近似パーセンタイル値を計算します。パーセンタイルは 0.0 から 1.0 (両端を含む) の値である必要があります。WITHIN GROUP (ORDER BY ...) 構文が必要です。 UNNEST(array a [, array b...])[, b…] の行 配列を行のセットに展開します。この形式は FROM 句でのみ許可されます。
MIN
Copy
SELECT MIN ( response_time ) AS min_response_time
FROM logs
WHERE status_code = 200 MAX
Copy
SELECT MAX ( response_time ) AS max_response_time
FROM logs
WHERE status_code = 200 COUNT
Copy
SELECT COUNT ( request_id ) AS total_requests
FROM logs
WHERE status_code = 200 SUM
Copy
SELECT SUM ( bytes_transferred ) AS total_bytes
FROM logs
GROUP BY service_name AVG
Copy
SELECT AVG ( response_time )
AS avg_response_time
FROM logs
WHERE status_code = 200
GROUP BY service_name BOOL_AND
Copy
SELECT BOOL_AND ( status_code = 200 ) AS all_success
FROM logs BOOL_OR
Copy
SELECT BOOL_OR ( status_code = 200 ) AS some_success
FROM logs CEIL
Copy
SELECT CEIL ( price ) AS rounded_price
FROM products FLOOR
Copy
SELECT FLOOR ( price ) AS floored_price
FROM products ROUND
Copy
SELECT ROUND ( price ) AS rounded_price
FROM products POWER
Copy
SELECT POWER ( response_time , 2 ) AS squared_response_time
FROM logs LOWER
Copy
SELECT LOWER ( customer_name ) AS lowercase_name
FROM customers UPPER
Copy
SELECT UPPER ( customer_name ) AS uppercase_name
FROM customers ABS
Copy
SELECT ABS ( balance ) AS absolute_balance
FROM accounts COALESCE
Copy
SELECT COALESCE ( phone_number , email ) AS contact_info
FROM users CASTサポートされているキャストターゲット型は、次のとおりです。
BIGINTDECIMALINETTIMESTAMPVARCHAR
Copy
SELECT
CAST ( order_id AS VARCHAR ) AS order_id_string ,
'Order-' || CAST ( order_id AS VARCHAR ) AS order_label
FROM
orders LENGTH
Copy
SELECT
customer_name ,
LENGTH ( customer_name ) AS name_length
FROM
customers INTERVAL
Copy
SELECT
TIMESTAMP '2023-10-01 10:00:00' + INTERVAL '30 days' AS future_date ,
INTERVAL '1 MILLISECOND 2 SECONDS 3 MINUTES 4 HOURS 5 DAYS' TRIM
Copy
SELECT
TRIM ( name ) AS trimmed_name
FROM
users REPLACE
Copy
SELECT
REPLACE ( description , 'old' , 'new' ) AS updated_description
FROM
products SUBSTRING
Copy
SELECT
SUBSTRING ( title , 1 , 10 ) AS short_title
FROM
books REVERSE
Copy
SELECT
REVERSE ( username ) AS reversed_username
FROM
users
LIMIT 5 STRPOS
Copy
SELECT
STRPOS ( 'foobar' , 'bar' ) SPLIT_PART
Copy
SELECT
SPLIT_PART ( 'aaa-bbb-ccc' , '-' , 2 ) サポートされている抽出単位は、次のとおりです。
リテラル 入力型 説明 daytimestamp / interval月の日 dowtimestamp曜日 1(月曜日) から 7(日曜日) doytimestamp年の日 (1 - 366) epochtimestamp / interval1970 年 1 月 1 日 00:00:00 UTC からの秒数 (タイムスタンプの場合)、または合計秒数 (間隔の場合) hourtimestamp / interval1 日の時間 (0 - 23) minutetimestamp / interval時間の分 (0 - 59) secondtimestamp / interval分の秒 (0 - 59) weektimestamp年の週 (1 - 53) monthtimestamp年の月 (1 - 12) quartertimestamp年の四半期 (1 - 4) yeartimestamp年 timezone_hourtimestampタイムゾーンオフセットの時間 timezone_minutetimestampタイムゾーンオフセットの分
Copy
SELECT
EXTRACT ( year FROM purchase_date ) AS purchase_year
FROM
sales
Copy
-- Get the Unix epoch of a timestamp
SELECT EXTRACT ( epoch FROM TIMESTAMP '2021-01-01 00:00:00+00' )
-- Returns: 1609459200
Copy
-- Get the total seconds in an interval
SELECT EXTRACT ( epoch FROM INTERVAL '1 day 2 hours' )
-- Returns: 93600
Copy
-- Calculate how many seconds ago each event occurred
SELECT
event_time ,
EXTRACT ( epoch FROM now ()) - EXTRACT ( epoch FROM event_time ) AS seconds_ago
FROM
events TO_TIMESTAMPTO_TIMESTAMP には 2 つの形式があります:
形式 1: 文字列をタイムスタンプに変換する形式
サポートされている日付/時間の形式のパターンは、次のとおりです。
パターン 説明 YYYY年 (4 桁) YY年 (2 桁) MM月番号 (01 - 12) DD月の日 (01 - 31) HH241 日の時間 (00 - 23) HH121 日の時間 (01 - 12) HH1 日の時間 (01 - 12) MI分 (00 - 59) SS秒 (00 - 59) MSミリ秒 (000 - 999) TZタイムゾーンの略語 OFUTC からのタイムゾーンのオフセット AM / am午前午後の記号 (ピリオドなし) PM / pm午前午後の記号 (ピリオドなし)
Copy
SELECT
TO_TIMESTAMP ( '25/12/2025 04:23 pm' , 'DD/MM/YYYY HH:MI am' ) AS ts 形式 2: UNIX エポックタイムスタンプをタイムスタンプに変換する形式
Copy
SELECT
TO_TIMESTAMP ( 1735142580 ) AS ts_from_epoch TO_CHARサポートされている日付/時間の形式のパターンは、次のとおりです。
パターン 説明 YYYY年 (4 桁) YY年 (2 桁) MM月番号 (01 - 12) DD月の日 (01 - 31) HH241 日の時間 (00 - 23) HH121 日の時間 (01 - 12) HH1 日の時間 (01 - 12) MI分 (00 - 59) SS秒 (00 - 59) MSミリ秒 (000 - 999) TZタイムゾーンの略語 OFUTC からのタイムゾーンのオフセット AM / am午前午後の記号 (ピリオドなし) PM / pm午前午後の記号 (ピリオドなし)
Copy
SELECT
TO_CHAR ( order_date , 'MM-DD-YYYY' ) AS formatted_date
FROM
orders DATE_BIN
Copy
SELECT DATE_BIN ( '15 minutes' , TIMESTAMP '2025-09-15 12:34:56' , TIMESTAMP '2025-01-01' )
-- Returns 2025-09-15 12:30:00
SELECT DATE_BIN ( '1 day' , TIMESTAMP '2025-09-15 12:34:56' , TIMESTAMP '2025-01-01' )
-- Returns 2025-09-15 00:00:00 DATE_TRUNCサポートされている切り捨ては、次のとおりです。
millisecondsseconds / secondminutes / minutehours / hourdays / dayweeks / weekmonths / monthquarters / quarteryears / year
Copy
SELECT
DATE_TRUNC ( 'month' , event_time ) AS month_start
FROM
events CURRENT_SETTINGサポートされている設定パラメーターは、次のとおりです。
dd.time_frame_start: 選択した時間枠の開始を RFC 3339 形式で返します (YYYY-MM-DD HH:mm:ss.sss±HH:mm)。dd.time_frame_end: 選択した時間枠の終了を RFC 3339 形式で返します (YYYY-MM-DD HH:mm:ss.sss±HH:mm)。
Copy
-- Define the current analysis window
WITH bounds AS (
SELECT CAST ( CURRENT_SETTING ( 'dd.time_frame_start' ) AS TIMESTAMP ) AS time_frame_start ,
CAST ( CURRENT_SETTING ( 'dd.time_frame_end' ) AS TIMESTAMP ) AS time_frame_end
),
-- Define the immediately preceding window of equal length
previous_bounds AS (
SELECT time_frame_start - ( time_frame_end - time_frame_start ) AS prev_time_frame_start ,
time_frame_start AS prev_time_frame_end
FROM bounds
)
SELECT * FROM bounds , previous_bounds NOW
Copy
SELECT
*
FROM
sales
WHERE
purchase_date > NOW () - INTERVAL '1 hour' APPROX_PERCENTILE
Copy
-- Calculate the median (50th percentile) response time
SELECT
APPROX_PERCENTILE ( 0 . 5 ) WITHIN GROUP ( ORDER BY response_time ) AS median_response_time
FROM
logs
-- Calculate 95th and 99th response time percentiles by service
SELECT
service_name ,
APPROX_PERCENTILE ( 0 . 95 ) WITHIN GROUP ( ORDER BY response_time ) AS p95_response_time ,
APPROX_PERCENTILE ( 0 . 99 ) WITHIN GROUP ( ORDER BY response_time ) AS p99_response_time
FROM
logs
GROUP BY
service_name 正規表現 フレーバー すべての正規表現 (regex) 関数は、ICU (International Components for Unicode) フレーバーを使用します。
関数 関数 戻り値の型 説明 REGEXP_LIKE(string input, string pattern)ブール値 文字列が正規表現パターンに一致するかどうかを評価します。 REGEXP_MATCH(string input, string pattern [, string flags ])文字列の配列 文字列内の最初のパターン一致の部分文字列を返します。 この関数は、指定されたパターンを使用して入力文字列を検索し、最初の一致からキャプチャされた部分文字列 (キャプチャグループ) を返します。キャプチャグループが存在しない場合は、完全一致を返します。 REGEXP_REPLACE(string input, string pattern, string replacement [, string flags ])文字列 パターンに最初に一致する部分文字列を置き換えます。オプションの g フラグ を使用すると、すべての一致が置き換えられます。 REGEXP_REPLACE (string input, string pattern, string replacement, integer start, integer N [, string flags ] )文字列 パターンの N 番目の一致である部分文字列を置き換えます。N がゼロの場合は、start からのすべての一致が置き換えられます。
REGEXP_LIKE
Copy
SELECT
*
FROM
emails
WHERE
REGEXP_LIKE ( email_address , '@example\.com$' ) REGEXP_MATCH
Copy
SELECT regexp_match ( 'foobarbequebaz' , '(bar)(beque)' );
-- {bar,beque}
SELECT regexp_match ( 'foobarbequebaz' , 'barbeque' );
-- {barbeque}
SELECT regexp_match ( 'abc123xyz' , '([a-z]+)(\d+)(x(.)z)' );
-- {abc,123,xyz,y} REGEXP_REPLACE
Copy
SELECT regexp_replace ( 'Auth success token=abc123XYZ789' , 'token=\w+' , 'token=***' );
-- Auth success token=***
SELECT regexp_replace ( 'status=200 method=GET' , 'status=(\d+) method=(\w+)' , '$2: $1' );
-- GET: 200
SELECT regexp_replace ( 'INFO INFO INFO' , 'INFO' , 'DEBUG' , 1 , 2 );
-- INFO DEBUG INFO 関数レベルのフラグ 正規表現関数 では、次のフラグを使用できます。
i大文字と小文字を区別しない一致 n または m改行を区別する一致 gグローバル。最初の一致のみではなく、_すべて_の一致部分文字列を置き換えます。 i フラグ
Copy
SELECT regexp_match ( 'INFO' , 'info' )
-- NULL
SELECT regexp_match ( 'INFO' , 'info' , 'i' )
-- ['INFO'] n フラグ
Copy
SELECT regexp_match ( 'a
b' , '^b' );
-- NULL
SELECT regexp_match ( 'a
b' , '^b' , 'n' );
-- ['b'] g フラグ
Copy
SELECT icu_regexp_replace ( 'Request id=12345 completed, id=67890 pending' , 'id=\d+' , 'id=XXX' );
-- Request id=XXX completed, id=67890 pending
SELECT regexp_replace ( 'Request id=12345 completed, id=67890 pending' , 'id=\d+' , 'id=XXX' , 'g' );
-- Request id=XXX completed, id=XXX pending ウィンドウ関数 次の表に、サポートされているウィンドウ関数の概要を示します。包括的な詳細と例は、PostgreSQL のドキュメント を参照してください。
関数 戻り値の型 説明 OVER該当なし ほかのウィンドウ関数が操作を行う行のセットのウィンドウを定義します。 PARTITION BY該当なし ウィンドウ関数を適用するためのパーティションに結果セットを分割します。 RANK()整数 パーティション内の各行に順位を割り当てます。同順位の場合は欠番が生じます。 ROW_NUMBER()整数 パーティション内の各行に一意の連番を割り当てます。 LEAD(column n)列の型 パーティション内の次の行からの値を返します。 LAG(column n)列の型 パーティション内の前の行からの値を返します。 FIRST_VALUE(column n)列の型 順序付けられた値のセットの最初の値を返します。 LAST_VALUE(column n)列の型 順序付けられた値のセットの最後の値を返します。 NTH_VALUE(column n, offset)列の型 順序付けられた値のセットで指定されたオフセットの値を返します。
JSON 関数と演算子 名前 戻り値の型 説明 json_extract_path_text(text json, text path…) テキスト パスで定義されている JSON サブオブジェクトをテキストとして抽出します。動作は 同じ名前の Postgres 機能 と同等です。たとえば、json_extract_path_text(col, ‘forest')は col 内の各 JSON オブジェクトに対してキー forestの値を返します。JSON 配列構文については、以下の例を参照してください。 json_extract_path(text json, text path…) JSON json_extract_path_text 機能は同じですが、テキスト型ではなく JSON 型の列を返します。json_array_elements(text json) JSON の行 JSON 配列を行のセットに展開します。この形式は FROM 句でのみ許可されます。 json_array_elements_text(text json) テキストの行 JSON 配列を行のセットに展開します。この形式は FROM 句でのみ許可されます。
ネットワークアドレス関数と演算子 inet 型は、オプションの CIDR プレフィックス長 (たとえば、192.168.1.5/24 または ::1) を持つ IPv4 および IPv6 ネットワークアドレスを表します。inet の値を作成するには、型リテラル構文 INET 'value' を使用するか、CAST(column AS inet) で文字列をキャストします。
関数 関数 戻り値の型 説明 host(inet addr)VARCHARプレフィックス長なしで、テキストとして IP アドレスを返します。 network(inet addr)INETホストビットが 0 に設定されたアドレスのネットワーク部分を返します。 netmask(inet addr)INETアドレスのネットワークマスクを返します。 masklen(inet addr)BIGINTネットワークマスクのプレフィックス長を返します。 broadcast(inet addr)INETネットワークのブロードキャストアドレスを返します。 family(inet addr)BIGINTアドレスファミリーを返します。IPv4 の場合は 4、IPv6 の場合は 6 です。
演算子 演算子 戻り値の型 説明 inet a << inet bBOOLEANa が厳密に b 内に含まれている場合に true を返します。inet a <<= inet bBOOLEANa が b 内に含まれているか、それと等しい場合に true を返します。inet a >> inet bBOOLEANa が厳密に b を含む場合に true を返します。inet a >>= inet bBOOLEANa が b を含むか、それと等しい場合に true を返します。inet a && inet bBOOLEANa と b のサブネットが重複する場合に
host
Copy
SELECT host ( INET '192.168.1.5/24' )
-- Returns: 192.168.1.5 network
Copy
SELECT network ( INET '192.168.1.5/24' )
-- Returns: 192.168.1.0/24 netmask
Copy
SELECT netmask ( INET '192.168.1.5/24' )
-- Returns: 255.255.255.0 masklen
Copy
SELECT masklen ( INET '192.168.1.5/24' )
-- Returns: 24 broadcast
Copy
SELECT broadcast ( INET '192.168.1.5/24' )
-- Returns: 192.168.1.255/24 family
Copy
SELECT family ( INET '::1' )
-- Returns: 6
SELECT family ( INET '192.168.1.5' )
-- Returns: 4 包含演算子
Copy
-- Check if an IP is within a subnet
SELECT INET '192.168.1.5' << INET '192.168.1.0/24'
-- Returns: true
-- Check containment or equality
SELECT INET '192.168.1.0/24' <<= INET '192.168.1.0/24'
-- Returns: true
-- Check if a subnet contains an IP
SELECT INET '10.0.0.0/8' >> INET '10.1.2.3'
-- Returns: true
-- Check if two subnets overlap
SELECT INET '192.168.1.0/24' && INET '192.168.1.128/25'
-- Returns: true 組み合わせた使用方法
Copy
-- Find all IPs in a private subnet and extract network info
SELECT
host ( CAST ( src_ip AS inet )) AS ip ,
masklen ( CAST ( src_ip AS inet )) AS prefix_len ,
network ( CAST ( src_ip AS inet )) AS network
FROM connections
WHERE CAST ( src_ip AS inet ) << INET '10.0.0.0/8'
AND family ( CAST ( src_ip AS inet )) = 4 テーブル関数 テーブル関数は、ログ、メトリクス、Cloud Cost、その他のデータソースをクエリするために使用されます。
関数 説明 例
dd.logs(
columns => array < varchar >,
filter ?=> varchar,
indexes ?=> array < varchar >,
storage ?=> varchar,
from_timestamp ?=> timestamp,
to_timestamp ?=> timestamp
) AS (column_name type [, ...]) ログデータをテーブルとして返します。columns パラメーターは、抽出するログフィールドを指定します。ネストされたフィールドにはドット表記を使用してアクセスします。非コアフィールドには、 @の接頭辞を付ける必要があります。AS 句は返されるテーブルのスキーマを定義します。オプション: インデックスまたは時間範囲でフィルタリングします。時間が指定されていない場合、DDSQL はデフォルトでグローバル時間設定を使用します。DDSQL エディターでは、これは過去 1 時間に設定されています。オプション: 使用するストレージを指定します (たとえば、hot、flex_tier)。指定されていない場合のデフォルトは、ホットストレージです。
Copy
SELECT timestamp , host , service , message , asset_id
FROM dd . logs (
filter => 'source:java' ,
columns => ARRAY [ 'timestamp' , 'host' , 'service' , 'message' , '@asset.id' ]
) AS (
timestamp TIMESTAMP ,
host VARCHAR ,
service VARCHAR ,
message VARCHAR ,
asset_id VARCHAR
)
dd.metrics_scalar(
query varchar,
reducer varchar [, from_timestamp timestamp, to_timestamp timestamp]
) メトリクスデータをスカラー値として返します。この関数は、メトリクスクエリ (オプションでグループ化を指定)、値の集計方法を決定するレデューサー (avg、max など)、および時間範囲を定義するオプションのタイムスタンプパラメーター (デフォルトは 1 時間) を受け入れます。
Copy
SELECT *
FROM dd . metrics_scalar (
'avg:system.cpu.user{*} by {service}' ,
'avg' ,
TIMESTAMP '2025-07-10 00:00:00.000-04:00' ,
TIMESTAMP '2025-07-17 00:00:00.000-04:00'
)
ORDER BY value DESC ;
dd.metrics_timeseries(
query varchar [, from_timestamp timestamp, to_timestamp timestamp]
) メトリクスデータを時系列として返します。この関数は、メトリクスクエリ (オプションでグループ化を指定) および時間範囲を定義するオプションのタイムスタンプパラメーター (デフォルトは 1 時間) を受け入れます。単一の集計値ではなく、一定期間のデータポイントを返します。
Copy
SELECT *
FROM dd . metrics_timeseries (
'avg:system.cpu.user{*} by {service}' ,
TIMESTAMP '2025-07-10 00:00:00.000-04:00' ,
TIMESTAMP '2025-07-17 00:00:00.000-04:00'
)
ORDER BY timestamp , service ;
dd.cloud_cost_scalar(
query varchar,
reducer varchar
[, from_timestamp timestamp,
to_timestamp timestamp]
) Cloud Cost Management データをスカラー値として返します。この関数は、Cloud Cost クエリ (オプションでグループ化を指定)、集計レデューサー (コストデータには sum を使用。 avg、min、および max などのその他のレデューサーも受け入れられますが、コストクエリではほとんど使用されません)、および時間範囲を定義するオプションのタイムスタンプパラメーター (デフォルトは 1 時間) を受け入れます。注 : Cloud Cost データは通常 24 ~ 48 時間遅延するため、最新のタイムスタンプは結果を返さない場合があります。
Copy
SELECT *
FROM dd . cloud_cost_scalar (
'sum:all.cost{*} by {service}' ,
'sum' ,
TIMESTAMP '2025-07-10 00:00:00.000-04:00' ,
TIMESTAMP '2025-07-17 00:00:00.000-04:00'
)
ORDER BY value DESC ;
dd.cloud_cost_timeseries(
query varchar
[, from_timestamp timestamp,
to_timestamp timestamp]
) Cloud Cost Management データを時系列として返します。この関数は、Cloud Cost クエリ (オプションでグループ化を指定) および時間範囲を定義するオプションのタイムスタンプパラメーター (デフォルトは 1 時間) を受け入れます。単一の集計値ではなく、一定期間のコストデータポイントを返します。注 : Cloud Cost データは通常 24 ~ 48 時間遅延するため、最新のタイムスタンプは結果を返さない場合があります。
Copy
SELECT *
FROM dd . cloud_cost_timeseries (
'sum:all.cost{*} by {service}' ,
TIMESTAMP '2025-07-10 00:00:00.000-04:00' ,
TIMESTAMP '2025-07-17 00:00:00.000-04:00'
)
ORDER BY timestamp , service ;
絶対タイムスタンプ
Copy
SELECT *
FROM dd . logs (
columns => ARRAY [ 'timestamp' , 'host' , 'service' , 'message' ],
from_timestamp => TIMESTAMP '2025-07-10 00:00:00.000-04:00' ,
to_timestamp => TIMESTAMP '2025-07-17 00:00:00.000-04:00'
) AS (
timestamp TIMESTAMP ,
host VARCHAR ,
service VARCHAR ,
message VARCHAR
) 相対タイムスタンプ
Copy
SELECT *
FROM dd . logs (
columns => ARRAY [ 'timestamp' , 'host' , 'service' , 'message' ],
from_timestamp => now () - INTERVAL '7 days' ,
to_timestamp => now ()
) AS (
timestamp TIMESTAMP ,
host VARCHAR ,
service VARCHAR ,
message VARCHAR
) オプションパラメーター
Copy
SELECT *
FROM dd . logs (
columns => ARRAY [ 'timestamp' , 'host' , 'service' , 'message' ],
filter => 'source:java' ,
indexes => ARRAY [ 'trino' ],
storage => 'hot'
) AS (
timestamp TIMESTAMP ,
host VARCHAR ,
service VARCHAR ,
message VARCHAR
) ネストされたフィールドへのアクセス 列のエイリアスにドットを含めることはできません。エイリアスを定義する際には、ドットをアンダースコアなどの有効な文字に置き換えてください。
Copy
SELECT timestamp , host , asset_id , view_url , data_resource_type
FROM dd . logs (
filter => 'service:mcp' ,
columns => ARRAY [ 'timestamp' , 'host' , '@asset.id' , '@view.url' , '@data.resource.type' ]
) AS (
timestamp TIMESTAMP ,
host VARCHAR ,
asset_id VARCHAR ,
view_url VARCHAR ,
data_resource_type VARCHAR
) DDSQL は、タグを hstore 型として公開します。これは PostgreSQL から着想を得たものです。PostgreSQL の矢印演算子を使用して、特定のタグキーの値にアクセスできます。たとえば、次のようにします。
SELECT instance_type , count ( instance_type )
FROM aws . ec2_instance
WHERE tags -> 'region' = 'us-east-1' -- region is a tag, not a column
GROUP BY instance_type
タグはキーと値のペアです。各キーには 0、1、またはそれに対応する複数のタグ値を割り当てることができます。アクセスされると、タグ値は対応する_すべて_の値を含む単一の文字列を返します。データで、同じタグキーに対して複数のタグ値がある場合、それらはソートされたカンマ区切りの文字列として表されます。たとえば、次のようになります。
SELECT tags -> 'team' , instance_type , architecture , COUNT ( * ) as instance_count
FROM aws . ec2_instance
WHERE tags -> 'team' = 'compute_provisioning,database_ops'
GROUP BY tags -> 'team' , instance_type , architecture
ORDER BY instance_count DESC
タグの値を文字列として比較するか、タグセット全体を比較することもできます。
SELECT *
FROM k8s . daemonsets da INNER JOIN k8s . deployments de
ON da . tags = de . tags -- for a specific tag: da.tags->'app' = de.tags->'app'
また、タグキーとタグ値をそれぞれ個別のテキスト配列に抽出することもできます。
SELECT akeys ( tags ), avals ( tags )
FROM aws . ec2_instance
HSTORE 関数と演算子 名前 戻り値の型 説明 tags -> ’text' テキスト 指定されたキーの値を取得します。キーが存在しない場合は null を返します。 akeys(hstore tags) テキストの配列 HSTORE のキーを配列として取得します。 avals(hstore tags) テキストの配列 HSTORE の値を配列として取得します。
参考資料