メインコンテンツへスキップ

SQL node

SQL ノードは、SQL ノードエディタを使用してフロー内で SQL クエリを実行するために使用します。SQL ノードにクエリを直接入力し、その結果に基づいてアクションを実行できます。これは、DoiT Cloud Intelligence に保存されている請求データに基づいて、データドリブンな条件付きロジックをフローに導入し、複雑な判断を容易に行えるようにするのに役立ちます。例えば、AWS の請求データに対して SQL クエリを記述できます。その出力にフィルターをかけて、最もコストの高いサービスを特定し、ステークホルダーに通知できます。

また、SQL ノードに Google Cloud 接続を紐付けることで、DoiT の請求データと並行して外部 BigQuery データセットをクエリできます。例えば、1 つのクエリでコストを自社の使用状況テーブルやプロジェクトテーブルと結合できます。ただし、1 つの SQL クエリ内で DoiT の請求データと外部 BigQuery テーブルを同時に参照することはできません。フロー内に 2 つの SQL ノードを使用し、1 つは DoiT の請求データをクエリし、もう 1 つは Google Cloud 接続を使用して外部 BigQuery データセットをクエリする必要があります。

Query DoiT billing data

SQL ノードを使用して、DoiT Cloud Intelligence に保存されている請求データをクエリできます。

SQL query example

以下は、過去 7 日間において、現在コストアロケーションタグが付与されていない、最もコストの高い AWS リソース 20 個を特定することで、コスト最適化とガバナンスを行うのに役立つ SQL クエリの例です。

WITH recent AS (
SELECT
resource_id,
service_description,
SUM(cost) AS untagged_cost_7d
FROM `aws_dci`
WHERE usage_start_time >= TIMESTAMP_SUB(CURRENT_TIMESTAMP(), INTERVAL 7 DAY)
AND (labels IS NULL OR ARRAY_LENGTH(labels) = 0)
GROUP BY resource_id, service_description
)
SELECT
resource_id,
service_description,
ROUND(untagged_cost_7d, 2) AS untagged_cost_7d
FROM recent
WHERE untagged_cost_7d > 5
ORDER BY untagged_cost_7d DESC
LIMIT 20;

以下は、即時対応が必要な AWS リソースを優先順位付きで一覧表示する、結果テーブルの例です。

resource_idservice_descriptionuntagged_cost_7d
i-0f23ab91c5d4ef123Amazon Elastic Compute Cloud142.37
vol-03bc1198a7e9d7812Amazon Elastic Block Store58.12
arn:aws:lambda:...func1AWS Lambda27.44
bucket-analytics-prodAmazon S312.91

Configure a SQL node

SQL ノードを設定するには、クエリを作成してテストし、その後、後続ノードで参照できるフィールドに対する期待される出力を確認します。

SQL node

  1. Create query を選択します。Create a SQL query ウィンドウが表示され、ここで SQL クエリを作成およびテストできます。

    Create a SQL query

  2. Query タブで SQL クエリを記述します。SQL ノードは GoogleSQL を使用します。記述と同時に、DoiT Cloud Intelligence が SQL クエリを検証し、構文エラーやその他の潜在的な問題を即座にハイライト表示します。

    ヒント

    Format を使用して SQL のインデントと改行を自動調整し、読みやすく編集しやすくしてください。

  3. Run query を選択してクエリをテストします。SQL ノードエディタでは、クエリを作成する前にクエリが正常に実行されることが必須となっており、検証済みのクエリのみが作成されます。

  4. Run を選択すると、結果が Results タブに表示され、クエリのロジック、効率性、およびデータ出力を検証できます。出力スキーマは DoiT 請求データスキーマに準拠しています。

    SQL query output columns

  5. Query Output Schema には、クエリから期待される出力が表示されます。これらは、後続ノードで参照できるフィールドです(例えば、+ ボタン経由)。Parameter types を参照してください。

    SQL node query output schema

Query external BigQuery datasets

オプションで、SQL ノードに Google Cloud 接続を紐付けて、DoiT Cloud Intelligence 以外に存在する BigQuery データセット(例えば、自社の Google Cloud プロジェクト内のテーブル)をクエリできます。

Connection permissions

SQL ノードで接続を使用するには、その接続に対するアクセス権(Owner、Editor、または User)が必要です。アクセス権がない場合、ノードにはエラーが表示され、利用権限のある接続を選択するまで Run query ボタンは無効化されます。

SQL query example

この例では、2 つの外部テーブルを結合して、プロジェクトごとの利用状況を分析します。

SELECT 
u.user_email,
p.project_name,
SUM(u.compute_hours) as total_hours
FROM `my-project.usage_data.daily_usage` AS u
JOIN `my-project.inventory.projects` AS p
ON u.project_id = p.id
WHERE u.usage_date >= DATE_SUB(CURRENT_DATE(), INTERVAL 30 DAY)
GROUP BY 1, 2
ORDER BY total_hours DESC;

以下は、過去 30 日間におけるユーザーおよびプロジェクトごとの合計コンピュート時間を示す結果テーブルの例です。

user_emailproject_nametotal_hours
[email protected]production-web124.5
[email protected]analytics-prod89.2
[email protected]staging42.0
[email protected]production-web31.8
ヒント

ハイフンを含むテーブル名(例えば外部データセット)にはバッククォート (`) を使用してください(例: `bigquery-public-data.bbc_news.fulltext`)。

Configure a SQL node

外部接続を設定するには、次の手順を実行してください。

  1. SQL ノードの Parameters タブで、Google Cloud connection セクションまでスクロールします。

  2. Connection ドロップダウンから既存の GCP 接続を選択します。自分にアクセス権のある接続のみが表示されます。

    SQL node with GCP connection dropdown

  3. 適切な接続が存在しない場合は、Create new を選択して新しい GCP 接続を設定します。

    接続を選択すると、SQL ノードには、接続された Google Cloud プロジェクト内のテーブルが、DoiT の請求データエイリアスと並んで含まれるようになります。

  4. Create query を選択します。Create a SQL query ウィンドウの Query タブで、外部データセットに対して完全修飾テーブル名(例: `my-project.my_dataset.my_table`)を使用してクエリを作成およびテストします。記述と同時に、DoiT Cloud Intelligence が SQL クエリを検証し、構文エラーやその他の潜在的な問題を即座にハイライト表示します。

    ヒント

    Format を使用して SQL のインデントと改行を自動調整し、読みやすく編集しやすくしてください。

  5. Run query を選択してクエリをテストします。SQL ノードエディタでは、クエリを作成する前にクエリが正常に実行されることが必須となっており、検証済みのクエリのみが作成されます。

注意

1 つのクエリ内で、DoiT の内部請求データテーブルと外部 BigQuery テーブルを混在させることはできません。フロー内で 2 つの別々の SQL ノードを使用し、1 つは DoiT の請求データをクエリし、もう 1 つは BigQuery データセットをクエリする必要があります。

注意

同じフロー内で 2 つの SQL ノードを使用する場合は、それらをシーケンスで接続してください。最初の SQL ノードの出力は、フロー内の後続ノードで利用可能になります。例えば、その出力を Filter ノードでフィルタリングしたり、Branch ノードで分岐に使用したり、Notification ノードに含めたりできます。下流ノードが必要なフィールドを参照できるように、Query Output Schema を定義してください。

Test

ノードをテストするには、Test を選択してください。