Denodo を活用して Google 検索結果をデータソースとして利用する方法

こんにちは！インサイトテクノロジーの松尾です。

本記事では **Denodo を活用して Google 検索結果をデータソースとして利用する方法** を紹介します。
Denodo 社の公式ナレッジベースでも紹介されているため、英語が得意な方は以下のリンクも参考にしてください。

https://community.denodo.com/kb/en/view/document/How%20to%20integrate%20the%20Google%20Search%20API%20in%20Denodo?utm_source=partner_lead_InsightTech

Denodo を使うと Web API でアクセスした結果をデータソースとして設定し、それを SQL でアクセスできるようにすることができます。すなわち **Web API による Google 検索の結果をデータソースとして設定し、SQL で簡単にアクセス** できるようになります。

例えば、特定のデータに基づいて Google 検索を行う場合、手作業で一つひとつ検索するのは面倒ですよね？  
そんなときこそ、今回紹介する方法が役立ちます！

次のセクションでは、具体的な設定手順を紹介していきます。

## 手順

以下の流れで進めます。

* **Google 検索 API の準備**
* **Denodo でデータソースと基本ビューの作成**

## Google 検索 API の準備

まずは **Google 検索 API（プログラム可能検索エンジン）** を準備します。

**公式ドキュメント**: [プログラム可能検索エンジンの作成](https://developers.google.com/custom-search/docs/tutorial/creatingcse?hl=ja)

### **① 検索エンジンの作成**
プログラム可能検索エンジンとは、特定の Web サイトやブログなどを対象に、カスタマイズ可能な検索機能を提供する Google のサービスです。
Google の手順に従い、検索エンジンを作成します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/82e43103-6598-2bb0-e2e3-6afeb63c4c15.png)

作成後、`cx=` で始まる **検索エンジン ID** を取得します。  
この ID は API を呼び出す際に必要になります。

### **② API キーの取得**

次に、API を利用するためのキーを取得します。

**公式ドキュメント**: [API キーの取得手順](https://developers.google.com/custom-search/v1/overview?hl=ja#api_key)

Google 検索 API は **1 日 100 件まで無料** で利用可能です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/5ad6eb4e-807e-5ff6-6a5d-16a616714c90.png)

「キーを取得」を選択後、プロジェクト名を入力し、利用条件に同意の上、「NEXT」を選択します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/cf7112e7-229a-b30c-05ef-e3987e7564fa.png)

キーを表示して取得します。

### **③ 検索エンジン ID & API キーの準備完了！**

これで、Google 検索 API を使用するための **エンジン ID（cx=）** と **API キー** が準備できました。  
次のステップでは、Denodo にデータソースとして登録していきます！

## Denodo でデータソースと基本ビューを作成

続いて、**Denodo 側で Google 検索 API をデータソースとして設定** します。

### **① JSON (HTTP/OpenAPI) タイプのデータソースを作成**

* **[データソース] → [JSON (HTTP/OpenAPI)]** を選択  
* 以下の情報を入力
  * 名前: (データソース名を適当に設定)
  * ベース URL: `https://www.googleapis.com/customsearch/v1`
  * 改ページの設定
    * サービスは改ページされたデータを返します: 有効化
    * リクエストの最大数: `10`
    * ページインデックス: 選択
      * ページサイズ用の URL 内のパラメータ: `count`
      * ページサイズ: `10`
      * 次のレコードに対する URL 内のパラメータ: `start`
      * 最初のレコードのインデックス: `1`
      * 次のリクエストに対するオフセット: `10`

![データソース作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/4e78b02e-a5ef-d40e-f755-2b02f03a075a.png)

![改ページの設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/aca64228-64af-e9c9-875e-bd35b9fb10b7.png)

### **② データソースの保存**

* 「保存」を選択

:::note warn
API の実行に必要なパラメータを設定していないため、ここでは「コネクションをテスト」を実行してもエラーとなります。
:::

### **③ 基本ビューの作成**

* 「基本ビューを作成」を選択
* 以下の情報を設定
  * 相対URL `?key=@key&cx=@cx&q=@word`

![基本ビュー作成](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/1d03eb8b-3beb-3b80-f56a-33e5d3303082.png)

### **④ コネクションテスト**

* **「コネクションをテスト」** を選択
* 接続情報、クエリ文字列を入力し、「OK」を選択

![クエリ文字列を入力](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/f75d742d-eaf8-3a49-aa58-be8c9c7a0a13.png)

### **⑤ タプルルートの設定**

* **[タプルルート]** をクリック
* **JSON ルートに `/JSONFile/items` を設定**

:::note warn
ここでタプルルートを指定することで、JSON データを 1 階層だけフラット化できます。(※1段階のみ)
:::

![タプルルート設定](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/19c99046-618b-97b4-24c2-d995761e6164.png)

### **⑥ 基本ビューの保存**

* **右上の「基本ビューを作成」** を選択
* **データソース名と同じ名称の基本ビューが作成** される  
* 「編集」をクリックすれば、基本ビューの名称を変更可能

![基本ビュー作成後](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/43fce4ec-a88a-aed1-7207-ef7ecbff318c.png)

### **⑦ クエリの実行**

基本ビューからクエリを実行すると Google 検索 API からデータを取得できます！ 
WHERE 句でパラメータと検索文字列を指定すると、検索結果が **テーブル形式** で返ってきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/5703cdef-82f2-0ac8-833e-e710d04ddeca.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/db57af8f-3d2e-c841-03b7-037d88967f60.png)

### **⑧ パラメータを事前に設定したビューの作成**

`key` と `cx` は常に変更するものではないので、それらをあらかじめ指定したビューを作っておきましょう。今作成した基本ビューに対する選択ビューで、「WHERE 条件」にあらかじめ設定しておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/5affeeca-ad3c-d164-e4a4-8c5f1842ca3c.png)

そして、出力も以下のように絞っておきます。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/5efc5cbf-1193-2e68-6716-07147fefbc5f.png)

作成されたビューはクエリを実行する際には以下のように `word` のみを指定する必要があります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/b26b4ae8-f895-0c27-d6b8-215590802a62.png)

実行結果は以下のようになりましたね！

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/5edd7151-3f7b-cbd5-f784-9ae5f3548e79.png)

## おわりに

本記事では、**Denodo から Google 検索の結果をデータソースとして利用する方法** を紹介しました。

Google 検索の結果をそのままデータソースとして活用するケースは限定的かもしれませんが、 **「検索エンジンでさえも SQL でクエリできるデータソースになり得る」** というのは、なかなか面白い発想ではないでしょうか？ そして **Denodo にデータソースとして登録することにより Google 検索結果を SQL で扱える** ようになります。

```sql:VQLによる Google 検索
-- VQL による Google 検索
SELECT * FROM admin.p_bv_google_insight_technology_web WHERE word = 'denodo' LIMIT 10;
```

![Denodo でのクエリ実行結果](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/f23133dd-81eb-90c9-198b-2ce66317c4d8.png)

Denodo の強みは、SQL インターフェースを通じて外部ツールからもデータへアクセスできることです。例えば、DBeaver などのツールから Denodo に接続してクエリを実行して確認することができます。これはクエリを実行していますが、実際には Google 検索を実行しているのです。

![DBeaver からのクエリ実行例](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3480312/28dc824d-46fb-2c5d-8f12-b8e0ab16e8f4.png)

### もう少し詳しく知りたい方へ

弊社 **インサイトテクノロジー** は、Denodo 社の公式パートナーとして、Denodo Platform の紹介、販売、導入支援を行っています。ご興味のある方は、以下のリンクから弊社または Denodo 社へお問い合わせください。

https://www.insight-tec.com/products/denodo/

https://www.denodo.com/ja/denodo-platform/denodo-platform?utm_source=partner_lead_InsightTech

また、

- 「これからデータ統合基盤を整備したい」
- 「どのようにデータを統合すればよいか迷っている」
- 「現在進行中のプロジェクトで特定の課題がある（例: Snowflake に SAP からリアルタイムデータを取り込みたい）」

といったお悩みや具体的なご相談も、ぜひお気軽にお問い合わせください。

https://www.insight-tec.com/products/consulting/