本文へ移動
Telemetry
ドキュメントを見る
APIリファレンス更新日: 2026年7月29日Telemetry 編集チームと製品チームによるレビュー5 最小読み取り時間

コーディング エージェントでこのドキュメントを使用してください

Claude Code、Codex、Cursor、または別のコーディング エージェント用の集中プロンプト パックを開き、それをここで説明するワークフローに適応させます。

このページの内容
  1. cURLでの使用例
  2. JavaScript SDK の使用
  3. 非同期クエリ
  4. 仕組み
  5. API リファレンス
  6. cURL による非同期クエリ
  7. 例: テーブル全体をエクスポートする
  8. SDK 境界
  9. よくあるエラー

クエリ

クエリ API を使用すると、Telemetry データに対して SQL を実行できます。

投稿 https://api.telemetry.sh/query

ヘッダー

名前 タイプ 説明
コンテンツタイプ 文字列 アプリケーション/json
認可 文字列 API キー (生のキーまたは Bearer <key>

本体

名前 タイプ 必須 説明
クエリ 文字列 はい 実行する SQL クエリ。
リアルタイム ブール値 いいえ デフォルトは true。クエリ サービスに渡されます。
json ブール値 いいえ デフォルトは true。クエリ サービスに渡されます。

成功時のレスポンス、200 OK

{
  "status": "success",
  "data": [
    {
      "city": "paris",
      "average_price": 42.0
    }
  ],
  "key_order": ["city", "average_price"]
}

data 結果行が含まれます。 key_order クエリ結果の列の順序を保持します。

cURLでの使用例

この cURL リクエストは、uber_rides の都市別平均乗車料金をクエリします。

QUERY=$(cat <<'SQL'
SELECT
  city,
  AVG(price) AS average_price
FROM
  uber_rides
GROUP BY
  city
LIMIT
  10000;
SQL
)

curl -X POST https://api.telemetry.sh/query \
  -H "Content-Type: application/json" \
  -H "Authorization: $API_KEY" \
  -d "$(jq -n --arg query "$QUERY" '{query: $query, realtime: true, json: true}')"

JavaScript SDK の使用

開発者エクスペリエンスを向上させるために、SDK を使用することをお勧めします。

import telemetry from "telemetry-sh";

telemetry.init("YOUR_API_KEY");

const results =
  await telemetry.query(`
    SELECT
      city,
      AVG(price)
    FROM
      uber_rides
    GROUP BY
      city
  `);

非同期クエリ

小さな JSON 結果は result 内の datakey_order として直接返されます。大きな JSON 結果と Parquet エクスポートには download_url が使われます。完了したレスポンスにはどちらか一方があれば十分です。直接返される結果にダウンロード URL や URL の有効期限フィールドは不要です。download_url_expired が true の場合は新しいクエリを開始してください。有効期限フィールドは省略可能です。

これは、テーブル全体をエクスポートしたり、大量の集計を実行したり、結果を JSON または Parquet ファイルとしてダウンロードしたりする場合に特に便利です。

仕組み

  1. スタートPOST あなたの質問への /query/async。サーバーは job_id そして status_url.
  2. 投票GETstatus_url 進捗状況を確認します。
  3. result の結果を読み取るか、download_url からファイルをダウンロードします。

API リファレンス

非同期クエリを開始する

投稿 https://api.telemetry.sh/query/async

ヘッダー

名前 タイプ 説明
コンテンツタイプ 文字列 アプリケーション/json
認可 文字列 API キー (生のキーまたは Bearer <key>

本体

名前 タイプ 必須 説明
クエリ 文字列 はい 実行する SQL クエリ。
リアルタイム ブール値 いいえ デフォルトは true。クエリ サービスに渡されます。
json ブール値 いいえ デフォルトは true。クエリ サービスに渡されます。
フォーマット 文字列 いいえ 結果の形式: "json" (デフォルト) または "parquet".

応答 (202件承認)

{
  "status": "accepted",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "format": "json",
  "status_url": "/query/async/550e8400-e29b-41d4-a716-446655440000"
}

ポーリングクエリステータス

ゲット https://api.telemetry.sh/query/async/{job_id}

ヘッダー

名前 タイプ 説明
認可 文字列 API キー (生のキーまたは Bearer <key>

応答 (200OK)

直接返される JSON 結果

{
  "status": "success",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "query_status": "completed",
  "format": "json",
  "progress_pct": 100,
  "result": {
    "data": [{ "events": 7 }],
    "key_order": ["events"]
  }
}

ダウンロード可能な結果

{
  "status": "success",
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "query_status": "completed",
  "format": "json",
  "progress_pct": 100,
  "message": "Query completed",
  "created_at": "2025-02-24T12:00:00Z",
  "completed_at": "2025-02-24T12:00:05Z",
  "download_url": "https://storage.example.com/results/...",
  "download_url_expires_in_seconds": 3600
}

いつ format です "json"、ダウンロードされたファイルには、クエリ メタデータと標準のクエリ結果の形状が含まれています。 result:

{
  "job_id": "550e8400-e29b-41d4-a716-446655440000",
  "format": "json",
  "result": {
    "data": [
      {
        "city": "paris",
        "average_price": 42.0
      }
    ],
    "key_order": ["city", "average_price"]
  }
}

query_status フィールドは次のいずれかになります。

ステータス 説明
queued クエリは実行を待っています
running クエリは現在実行中です
completed 結果は result または download_url で取得できます。
failed クエリは失敗しました。チェックしてください error フィールド。
cancelled クエリはキャンセルされました。

cURL による非同期クエリ

# 1. Start the async query
QUERY='SELECT * FROM uber_rides'
RESPONSE=$(curl --fail-with-body -sS --max-time 30 https://api.telemetry.sh/query/async \
  -H "Content-Type: application/json" \
  -H "Authorization: $API_KEY" \
  -d "$(jq -n --arg query "$QUERY" '{query: $query, format: "json", realtime: true, json: true}')") || exit 1
STATUS_URL="https://api.telemetry.sh$(echo "$RESPONSE" | jq -r '.status_url')"

# 2. Poll for at most ten minutes
DEADLINE=$((SECONDS + 600))
while [ "$SECONDS" -lt "$DEADLINE" ]; do
  STATUS=$(curl --fail-with-body -sS --max-time 30 -H "Authorization: $API_KEY" "$STATUS_URL") || exit 1
  QUERY_STATUS=$(echo "$STATUS" | jq -r '.query_status')

  if [ "$QUERY_STATUS" = "completed" ]; then
    if echo "$STATUS" | jq -e '.download_url_expired == true' >/dev/null; then
      echo "Result expired. Start a new query."
      exit 1
    elif echo "$STATUS" | jq -e '.result | type == "object"' >/dev/null; then
      echo "$STATUS" | jq '{result: .result}' > results.json
    else
      DOWNLOAD_URL=$(echo "$STATUS" | jq -r '.download_url // empty')
      if [ -z "$DOWNLOAD_URL" ]; then
        echo "Completed response has neither a result nor an active download URL."
        exit 1
      fi
      curl --fail-with-body -sS --max-time 300 -o results.json "$DOWNLOAD_URL" || exit 1
    fi
    # Both branches have the same result shape, including an empty data array.
    jq '.result' results.json
    exit 0
  elif [ "$QUERY_STATUS" = "failed" ] || [ "$QUERY_STATUS" = "cancelled" ]; then
    echo "Query $QUERY_STATUS: $(echo "$STATUS" | jq -r '.error // .message')"
    exit 1
  elif [ "$QUERY_STATUS" != "queued" ] && [ "$QUERY_STATUS" != "running" ]; then
    echo "Unexpected query status: $QUERY_STATUS"
    exit 1
  fi
  sleep 5
done
echo "Query polling timed out."
exit 1

例: テーブル全体をエクスポートする

非同期クエリ API は、テーブル全体のエクスポートに最適です。非同期クエリには行制限がないため、すべてをエクスポートし、結果を 1 つのファイルとしてダウンロードできます。

# Start the export as Parquet
QUERY='SELECT * FROM uber_rides'

RESPONSE=$(curl -s -X POST https://api.telemetry.sh/query/async \
  -H "Content-Type: application/json" \
  -H "Authorization: $API_KEY" \
  -d "$(jq -n --arg query "$QUERY" '{query: $query, format: "parquet", realtime: true, json: true}')")

STATUS_URL="https://api.telemetry.sh$(echo "$RESPONSE" | jq -r '.status_url')"

# Poll until complete
while true; do
  STATUS=$(curl -s -H "Authorization: $API_KEY" "$STATUS_URL")
  QUERY_STATUS=$(echo "$STATUS" | jq -r '.query_status')

  if [ "$QUERY_STATUS" = "completed" ]; then
    DOWNLOAD_URL=$(echo "$STATUS" | jq -r '.download_url // empty')
    if [ -z "$DOWNLOAD_URL" ]; then
      echo "Export completed, but no active download URL is available."
      exit 1
    fi
    curl -o uber_rides_export.parquet "$DOWNLOAD_URL"
    echo "Export complete: uber_rides_export.parquet"
    break
  elif [ "$QUERY_STATUS" = "failed" ]; then
    echo "Export failed: $(echo "$STATUS" | jq -r '.error // .message')"
    exit 1
  fi

  sleep 5
done

SDK 境界

現在の JavaScript SDK query メソッドは対話型を呼び出します /query 終点。始まらない /query/async、投票 status_url、を強制する 非同期ジョブのタイムアウト、または完成したアーティファクトのダウンロード。

大規模な JSON または Parquet の場合は、上記の HTTP 開始、ポーリング、ダウンロード フローを使用してください。 輸出。アプリケーション ラッパーはこれら 3 つの操作をカプセル化できますが、 合計ポーリング期限を強制する必要があります。停止してください failed、そして治療します 期限切れ download_url 古いダウンロードを再試行するのではなく、新しいエクスポートとして 無期限に。

よくあるエラー

  • 400 Bad Request JSON ボディが無効な場合
  • 400 Bad Request もし query が見つからないか空です
  • 401 Unauthorized API キーが見つからないか無効な場合
  • 402 Payment Required アカウントがペイウォールチェックによってブロックされている場合
  • 429 Too Many Requests API キーがゲートウェイのレート制限を超えた場合

関連機能

構造化イベント テーブルに対して読み取り専用 DataFusion SQL を実行し、結果を再利用します。

ページの著者と参考資料

Telemetry 編集チームがこの説明を所有しています。製品チームは動作、例、境界をレビューします。

ドキュメントのレビュー方法