DDSQL リファレンス

次で利用可能:

DDSQL エディター | ノートブック

概要

DDSQL は Datadog データ用の SQL です。SELECT などの標準の SQL 操作をいくつか実装しており、非構造化データに対するクエリを可能にします。独自の SELECT ステートメントを記述して必要なデータを正確に取得する、タグを標準のテーブル列と同様にクエリするといったアクションを実行できます。

DDSQL クエリは、Datadog MCP サーバー ddsql ツールセットを使用して、AI エージェントから実行できます (プレビュー)。

このドキュメントでは、次のような利用可能な SQL サポートについて紹介します。

SQL 構文が示されているワークスペースセルの例

構文

次の SQL 構文がサポートされています。

SELECT (DISTINCT) (DISTINCT: オプション)
データベースから行を取得し、DISTINCT を指定して重複レコードを除外します。
SELECT DISTINCT customer_id
FROM orders 
JOIN
複数のテーブル間の関連する列に基づいて、それらのテーブルの行を結合します。FULL JOIN、INNER JOIN、LEFT JOIN、RIGHT JOIN がサポートされます。
SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers
ON orders.customer_id = customers.customer_id 
GROUP BY
指定された列に同じ値を持つ行をグループ化して、要約行を生成します。
SELECT product_id, SUM(quantity)
FROM sales
GROUP BY product_id 
|| (concat)
複数の文字列を連結します。
SELECT first_name || ' ' || last_name AS full_name
FROM employees 
WHERE (LIKEINONOR フィルターのサポートを含む)
指定された条件を満たすレコードをフィルタリングします。
SELECT *
FROM employees
WHERE department = 'Sales' AND name LIKE 'J%' 
CASE
指定された条件に基づいて異なる値を返す条件ロジックを提供します。
SELECT order_id,
  CASE
    WHEN quantity > 10 THEN 'Bulk Order'
    ELSE 'Standard Order'
  END AS order_type
FROM orders 
WINDOW
現在の行に関連するテーブル行のセットに対して計算を実行します。
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 でないかをチェックします。
SELECT *
FROM orders
WHERE delivery_date IS NULL 
LIMIT
返されるレコードの最大数を指定します。
SELECT *
FROM customers
LIMIT 10 
OFFSET
指定された数のレコードをスキップしてから、クエリからレコードを返し始めます。
SELECT *
FROM employees
OFFSET 20 
ORDER BY
クエリの結果セットを 1 つ以上の列でソートします。ソート順には ASC、DESC を使用できます。
SELECT *
FROM sales
ORDER BY sale_date DESC 
HAVING
グループ化後に指定された条件を満たすレコードをフィルタリングします。
SELECT product_id, SUM(quantity)
FROM sales
GROUP BY product_id
HAVING SUM(quantity) > 10 
INONOR
クエリの指定条件で使用されます。WHERE 句と JOIN 句で利用できます。
SELECT *
FROM orders
WHERE order_status IN ('Shipped', 'Pending') 
USING
この句は、両方のテーブルで結合列の名前が同じである場合の結合の省略形です。それらの列のカンマ区切りリストを取得し、一致するペアごとに別の等号条件を作成します。たとえば、T1T2USING (a, b) で結合することは、ON T1.a = T2.a AND T1.b = T2.b と同等です。
SELECT orders.order_id, customers.customer_name
FROM orders
JOIN customers
USING (customer_id) 
AS
列またはテーブルの名前をエイリアスに変更します。
SELECT first_name AS name
FROM employees 
算術演算
+-*/ のような演算子を使用して基本的な計算を行います。
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 であると推測され、123BIGINTtrueBOOLEAN であると推測されます。値が曖昧になる可能性がある場合は、明示的な型プレフィックスを使用してください。たとえば、TIMESTAMP '2025-01-01' はプレフィックスがない場合、VARCHAR であると推測されます。

-- 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, ...] 構文を使用します。配列の型は、値から自動的に推測されます。

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 が返されます。

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)

配列の列の要素にアクセスするには、同じ添字構文を使用します。

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

SELECT
  CARDINALITY(recipients) AS recipient_count
FROM
  emails

ARRAY_POSITION

SELECT
  ARRAY_POSITION(recipients, 'hello@example.com') AS position
FROM
  emails

STRING_TO_ARRAY

SELECT
  STRING_TO_ARRAY('a,b,c,d,e,f', ',') AS parts

ARRAY_TO_STRING

SELECT
  ARRAY_TO_STRING(ARRAY['a', 'b', 'c'], ',') AS joined_string

ARRAY_AGG

SELECT
  sender,
  ARRAY_AGG(subject) AS subjects,
  ARRAY_AGG(DISTINCT subject) AS distinct_subjects
FROM
  emails
GROUP BY
  sender

UNNEST

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)数値最も近い整数に切り上げられた値を返します。CEILCEILING はいずれもエイリアスとしてサポートされています。
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_startdd.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

SELECT MIN(response_time) AS min_response_time
FROM logs
WHERE status_code = 200

MAX

SELECT MAX(response_time) AS max_response_time
FROM logs
WHERE status_code = 200

COUNT

SELECT COUNT(request_id) AS total_requests
FROM logs
WHERE status_code = 200 

SUM

SELECT SUM(bytes_transferred) AS total_bytes
FROM logs
GROUP BY service_name

AVG

SELECT AVG(response_time)
AS avg_response_time
FROM logs
WHERE status_code = 200
GROUP BY service_name

BOOL_AND

SELECT BOOL_AND(status_code = 200) AS all_success
FROM logs

BOOL_OR

SELECT BOOL_OR(status_code = 200) AS some_success
FROM logs

CEIL

SELECT CEIL(price) AS rounded_price
FROM products

FLOOR

SELECT FLOOR(price) AS floored_price
FROM products

ROUND

SELECT ROUND(price) AS rounded_price
FROM products

POWER

SELECT POWER(response_time, 2) AS squared_response_time
FROM logs

LOWER

SELECT LOWER(customer_name) AS lowercase_name
FROM customers

UPPER

SELECT UPPER(customer_name) AS uppercase_name
FROM customers

ABS

SELECT ABS(balance) AS absolute_balance
FROM accounts

COALESCE

SELECT COALESCE(phone_number, email) AS contact_info
FROM users

CAST

サポートされているキャストターゲット型は、次のとおりです。

  • BIGINT
  • DECIMAL
  • INET
  • TIMESTAMP
  • VARCHAR
SELECT
  CAST(order_id AS VARCHAR) AS order_id_string,
  'Order-' || CAST(order_id AS VARCHAR) AS order_label
FROM
  orders

LENGTH

SELECT
  customer_name,
  LENGTH(customer_name) AS name_length
FROM
  customers

INTERVAL

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

SELECT
  TRIM(name) AS trimmed_name
FROM
  users

REPLACE

SELECT
  REPLACE(description, 'old', 'new') AS updated_description
FROM
  products

SUBSTRING

SELECT
  SUBSTRING(title, 1, 10) AS short_title
FROM
  books

REVERSE

SELECT
  REVERSE(username) AS reversed_username
FROM
  users
LIMIT 5

STRPOS

SELECT
  STRPOS('foobar', 'bar')

SPLIT_PART

SELECT
  SPLIT_PART('aaa-bbb-ccc', '-', 2)

EXTRACT

サポートされている抽出単位は、次のとおりです。

リテラル入力型説明
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タイムゾーンオフセットの分
SELECT
  EXTRACT(year FROM purchase_date) AS purchase_year
FROM
  sales
-- Get the Unix epoch of a timestamp
SELECT EXTRACT(epoch FROM TIMESTAMP '2021-01-01 00:00:00+00')
-- Returns: 1609459200
-- Get the total seconds in an interval
SELECT EXTRACT(epoch FROM INTERVAL '1 day 2 hours')
-- Returns: 93600
-- 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_TIMESTAMP

TO_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午前午後の記号 (ピリオドなし)
SELECT
  TO_TIMESTAMP('25/12/2025 04:23 pm', 'DD/MM/YYYY HH:MI am') AS ts

形式 2: UNIX エポックタイムスタンプをタイムスタンプに変換する形式

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午前午後の記号 (ピリオドなし)
SELECT
  TO_CHAR(order_date, 'MM-DD-YYYY') AS formatted_date
FROM
  orders

DATE_BIN

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

サポートされている切り捨ては、次のとおりです。

  • milliseconds
  • seconds / second
  • minutes / minute
  • hours / hour
  • days / day
  • weeks / week
  • months / month
  • quarters / quarter
  • years / year
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)。
-- 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

SELECT
  *
FROM
  sales
WHERE
  purchase_date > NOW() - INTERVAL '1 hour'

APPROX_PERCENTILE

-- 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

SELECT
  *
FROM
  emails
WHERE
  REGEXP_LIKE(email_address, '@example\.com$')

REGEXP_MATCH

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

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 フラグ

SELECT regexp_match('INFO', 'info')
-- NULL

SELECT regexp_match('INFO', 'info', 'i')
-- ['INFO']

n フラグ

SELECT regexp_match('a
b', '^b');
-- NULL

SELECT regexp_match('a
b', '^b', 'n');
-- ['b']

g フラグ

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…)JSONjson_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 bBOOLEANab 内に含まれているか、それと等しい場合に true を返します。
inet a >> inet bBOOLEANa が厳密に b を含む場合に true を返します。
inet a >>= inet bBOOLEANab を含むか、それと等しい場合に true を返します。
inet a && inet bBOOLEANab のサブネットが重複する場合に

host

SELECT host(INET '192.168.1.5/24')
-- Returns: 192.168.1.5

network

SELECT network(INET '192.168.1.5/24')
-- Returns: 192.168.1.0/24

netmask

SELECT netmask(INET '192.168.1.5/24')
-- Returns: 255.255.255.0

masklen

SELECT masklen(INET '192.168.1.5/24')
-- Returns: 24

broadcast

SELECT broadcast(INET '192.168.1.5/24')
-- Returns: 192.168.1.255/24

family

SELECT family(INET '::1')
-- Returns: 6

SELECT family(INET '192.168.1.5')
-- Returns: 4

包含演算子

-- 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

組み合わせた使用方法

-- 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 時間に設定されています。オプション: 使用するストレージを指定します (たとえば、hotflex_tier)。指定されていない場合のデフォルトは、ホットストレージです。
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 時間) を受け入れます。
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 時間) を受け入れます。単一の集計値ではなく、一定期間のデータポイントを返します。
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 を使用。 avgmin、および max などのその他のレデューサーも受け入れられますが、コストクエリではほとんど使用されません)、および時間範囲を定義するオプションのタイムスタンプパラメーター (デフォルトは 1 時間) を受け入れます。: Cloud Cost データは通常 24 ~ 48 時間遅延するため、最新のタイムスタンプは結果を返さない場合があります。
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 時間遅延するため、最新のタイムスタンプは結果を返さない場合があります。
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;

絶対タイムスタンプ

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
)

相対タイムスタンプ

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
)

オプションパラメーター

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
)

ネストされたフィールドへのアクセス

列のエイリアスにドットを含めることはできません。エイリアスを定義する際には、ドットをアンダースコアなどの有効な文字に置き換えてください。

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 の値を配列として取得します。

参考資料