SAS/ACCESS Interface to JDBC経由で、RESTデータソースにSQLで接続する？

#はじめに
各サービスの機能を利用し合い、自前だけでは容易に実現できない価値を生み出すAPIエコノミーが市民権を得て、接続のデファクトがRESTな今日この頃。

REST APIで取得したデータを保存し、リアルタイムのインテリジェンスまたは分析を提供したいというニーズは高いのですが、問題はこれらのREST APIの構築方法がそれぞれ異なることです。認証スキーム、レスポンスなど構造が異なったり、また、様々な場所にあるデータを取り込むには多くの労力を要するものです。

しかし、DataDirect Autonomous REST Connectorを使うと、JDBC経由のSQLでRESTデータソースに接続できます。何かと慣れ親しんだSQLで行けるのならその方が良いですしね。

この記事では、DataDirect Autonomous REST Connectorを利用し、SASよりYelpのAPIに「SQL」でデータ接続してみます。SAS/ACCESS Interface to JDBCを経由してSQLクエリを実行し、RESTデータソースにアクセスするやり方です。

題材はSASとYelpですが、他のアプリとRESTデータソースでも活用できます。

#何はなくともAutonomous REST Connectorのダウンロードとインストール

１．<a href="https://www.ashisuto.co.jp/datadirect/app_download/" target="_blank">ここ</a>からからAutonomous REST Connector for JDBCをダウンロードし、インストールを開始します。

２．インストーラーを実行し、指示に従い進めます。

３．インストール完了後、インストール先として別の場所を選択していない限り、Autonomous REST Connector for JDBCは以下のデフォルトパスにあります。

```console
C:\Program Files\Progress\DataDirect\JDBC_60\lib\autorest.jar
```


##Yelp APIキーの取得

１．<a href="https://www.yelp.com/developers/documentation/v3/get_started" target="_blank">Yelp Fusion API</a>を使用するには、Yelpの開発者用サイトに登録し、アプリケーションを作成する必要があります。

２．アプリケーションを作成するには、App Name（アプリケーション名）、Industry（業種）、Contact Email（連絡先メールアドレス）、Description（説明）のフォームに入力し、そのまま進むとClientIDとAPIキーが表示されます。これらはYelp APIの認証に使用します。


##Autonomous REST ConnectorをYelp用に設定

１．Autonomous REST Connectorの設定はエンドポイントにポイントするのみ。

２．この記事ではYelpの提供するBusiness Search エンドポイントに接続してみます。例えば地域のすべてのビジネスを取得、または特定のカテゴリのビジネスを検索したいとします。

３．ドライバを設定して上記エンドポイントに接続するには、以下のJDBC URLを使用するだけです。

```console
jdbc:datadirect:autorest:sample=http://api.yelp.com/v3/businesses/search?location=27617;AuthenticationMethod=HttpHeader;AuthHeader=Authorization;SecurityToken='Bearer <あなたのAPI Key>'
```

４．4. Autonomous REST ConnectorでRESTデータソースに接続すると、APIは自動的にサンプリング（抽出）され、_CONFIGURATIONテーブルへクエリすることでアクセス可能な構成が作成されます。この構成は、Dbeaver、Squirrel SQL等のSQLクエリツールで、Autonomous REST JDBCドライバを使用することで取得できます。

５．この記事用の構成を、GitHubから<a href="https://github.com/progress/DataDirect-Code-Samples/blob/master/AutonomousRESTGlueSample/yelp.rest" target="_blank">ダウンロード</a>し、yelp.restとして保存してください。

６．この構成で、Autonomous REST Connectorがすべてのオブジェクトとそのデータ型を検出していることがわかります。

７．Autonomous REST Connectorの詳細、ニーズに合わせて設定する方法、複数のエンドポイントに接続する方法は、以下のチュートリアルを参照してみてください。

１）<a herf="https://www.progress.com/tutorials/jdbc/query-any-rest-api-using-sql-via-jdbc-in-5-mins---getting-started-(part-1)" target="_blank">入門</a>
２）<a herf="https://www.progress.com/tutorials/jdbc/query-any-rest-api-using-jdbc---connecting-to-multiple-endpoints-(part-2)" target="_blank">複数のエンドポイントへの接続</a>
３）<a herf="https://www.progress.com/tutorials/jdbc/query-any-rest-api-using-jdbc-editing-the-auto-generated-schema-(part-3)" target="_blank">自動生成されたスキーマの編集</a>
４）<a herf="https://www.progress.com/tutorials/jdbc/query-any-rest-api-using-jdbc-quickly-paging-any-rest-api-to-access-all-the-data-(part-4)" target="_blank">REST APIのページング</a>


#SASからREST APIへの接続

１．SAS/ACCESS Interface to JDBCを使用すると、DataDirectのAutonomous RESTドライバを使用して、様々なRESTデータソースへ簡単に接続できます。

２．SASを開き、[ファイル]>[新しいプログラム]へ移動して、新しいプログラムを作成します。

３．YelpのAPIに接続し、Businessesテーブルのデータを参照するサンプルコードを以下に記述します。このコードでは、前のセクションでダウンロードした設定ファイル（yelp.rest）へのパス変更が必要です。

```console
libname x jdbc driverclass="com.ddtek.jdbc.autorest.AutoRESTDriver"
URL="jdbc:datadirect:autorest:config=C:\Users\sbobba\Desktop\ARCConfigFiles\yelp.rest;databasename=yelp2w1q;authenticationMethod=HttpHeader;authheader=Authorization;SecurityToken='Bearer <Access Token>'"
classpath="C:\Users\sbobba\Downloads\Debug Drivers";
proc print data=x.businesses;
run;
```


４．プログラムを実行すると、以下のようにデータ表示されると思います。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/662096/15dbd364-58f1-8b5b-df21-b8ff669c7d86.png)

SAS/ACCESS Interface to JDBCを利用すると、内部/外部のREST APIに簡単に接続できます。
またSAS/ACCESS InterfaceをODBCで利用したい場合、ODBC版もあるのでそちらでOKです。

REST API接続のみならず、MongoDB、DB2、Redshift、Oracle、SQL Server等のソースにも接続できます。


参考サイト
<a herf="https://www.progress.com/tutorials/jdbc/connect-to-any-rest-api-from-sas-using-jdbc-interface" target="_blank">Connect to any REST API from SAS using JDBC interface</a>
<a herf="https://www.progress.com/jdbc/autonomous-rest-api" target="_blank">Autonomous REST Connector for JDBC</a>
<a herf="https://www.progress.com/odbc/autonomous-rest-api" target="_blank">Autonomous REST Connector for ODBC</a>
<a herf="https://www.ashisuto.co.jp/datadirect/" target="_blank">Progress DataDirect</a>

<a herf="https://documentation.sas.com/?docsetId=whatsnew&docsetTarget=n0kibwnbvqwfuyn1d0jkru5np8qn.htm&docsetVersion=9.4_3.4&locale=ja" target="_blank">SAS/ACCESS Interface to JDBC</a>

<a herf="https://www.yelp.com/developers" target="_blank">yelp Developers</a>
<a herf="https://www.yelp.com/developers/documentation/v3/get_started" target="_blank">Get started with the Yelp Fusion API</a>
<a herf="https://www.ashisuto.co.jp/datadirect/solutions/autonomous-rest-connector.html" target="_blank">Autonomous REST Connector</a>