SELECT 実行
URL とカラムの定義 が指定されている場合、本製品 はSupportEnhancedSQL を介してクライアント側のインメモリでSELECT ステートメントを処理します。 次のセクションでは、本製品 のビルトインオペレーションを使って、本製品 がどのようにリクエストを出してサーバーからデータを返すかをカスタマイズする方法を示します。
CSV へのSelect の実行
SELECT クエリが発行されると、本製品 は、スキーマのGET メソッドを実行します。このメソッドでは、CSV を処理できます。 このスキーマの詳細な例を見るには、CSV データのモデリング を参照してください。
データの取得
次の行はスキーマをURI にマップします。
<api:set attr="uri" value="ftp://somewebsite/NorthwindOData.csv" />
GET メソッドでデータを取得する処理を呼び出します。api:push キーワードを使って操作を指定します。次の行は、処理の結果をスキーマのアウトプットにプッシュします。
<api:script method="GET" >
<api:push op="csvproviderGet"/>
</api:script>
WHERE 句検索、JOIN クエリ、およびSQL 集計関数を実行できます。
データ検索のカスタマイズ
本製品 の操作は、サーバーに送信されるリクエストを高いレベルで制御可能にします。さまざまな入力を設定して、認証やその他のリクエストの側面を制御できます。 利用可能は入力はオペレーション を参照してください。
また、SQL ステートメントからの入力によってリクエストを構築することもできます。例として、次のセクションでは、WHERE 句を使用してリクエストを動的に変更する方法を示します。WHERE 句で指定された他のフィルタは本製品 によってクライアント側で処理されます。レスポンスで返されたあらゆるカラムを検索することができます。
CSV で場所の予測を返す天気予報API を考えてみましょう。URI に必要な場所を指定します。本製品 を使用すると、次のようなクエリで予測を取得できます。
SELECT * FROM Forecasts WHERE (Location = '90210')
下記の手順に従って、このクエリを実装します。次のプロシージャは、疑似カラム、WHERE 句でのみ使用できる入力を定義し、疑似カラムをAPI リクエストにマップします。
- ロケーション入力パラメータをapi:info ブロックのカラム定義に追加します。
<api:info> ... <input name="Location" required="true"/> </api:info>
- ロケーション疑似カラムの値を参照します。次の例では、ロケーションはURI に設定されたCSV リソースの名前です。
<api:set attr='uri' value="http://api.wunderground.com/api/MyAPIKey/hourly/q/[_input.Location].csv"/>
- 処理を呼び出してリクエストを行い、レスポンスを処理します。
<api:script method="GET" > <api:push op="csvproviderGet"/> </api:script>
ページングのカスタマイズ
本製品 の内部ページングメカニズムをオーバーライドするには、Rows@Next 入力をapi:info ブロックのカラムリストに追加します。
<input name="rows@next" desc="Identifier for the next page of results." />
これをattr パラメータではなくinput パラメータにすると、カラムリストに情報が表示されなくなります。
また、ドライバーの内部ページングメカニズムを無効にするには、EnablePaging 属性をTRUE に設定する必要があります。
<api:set attr="EnablePaging" value="TRUE" />
出力にRows@Next 値が設定されている場合、本製品 はこのページの結果を返した後、入力にRows@Next 値を使用してこのメソッドを自動的に再度呼び出します。この入力の値を使用して、次のパスのリクエストを変更して、次ページのデータを取得することができます。
次ページのデータをリクエストするために必要なあらゆる情報にRows@Next 入力を設定します。
例えば、API が次ページのURL を応答で返す場合があります。URL にXPath を指定することでこの値を取得できます。
<api:set attr="elementmappath#" value="/next_page" />
<api:set attr="elementmapname#" value="rows@next" />
値が設定されている場合は、リクエストが行われたURL を変更できます。api:check エレメントは、その値にアクセスを試みる前に、必要な入力の有無をチェックするのに便利です。Rows@Next 入力は、_input アイテムの属性としてアクセスできます。
<api:check attr="_input.rows@next">
<api:set attr="uri" value="[_input.rows@next]" />
<api:else>
<api:set attr="uri" value="<first page's URL>" />
</api:else>
<api:check>
SELECT ステートメントのコンポーネントへのアクセス
_query アイテムを使用して、スキーマのSELECT ステートメントのコンポーネントにアクセスできます。
query | SQL クエリ。次に例を示します。
SELECT Id, Name FROM Accounts WHERE City LIKE '%New%' AND COUNTRY = 'US' GROUP BY CreatedDate ORDER BY Name LIMIT 10,50; |
selectcolumns | SELECT ステートメントで指定されたカラムを含むカンマ区切りのリスト。例えば、この例ではId およびName カラムです。 |
table | SELECT ステートメントで指定されたテーブル名。例えば、この例ではAccounts です。 |
criteria | ステートメントのWHERE 句。例えば、この例では次のWHERE 句です。
City LIKE '%New%' AND COUNTRY = 'US' |
orderby | ORDER BY 句で指定されたカラム。例えば、この例ではName です。 |
groupby | SELECT ステートメントのGROUP BY 句。例えば、この例ではCreatedDate です。 |
limit | SELECT ステートメントのLIMIT またはTOP 句で指定されたリミット。例えば、この例では50 です。 |
offset | SELECT ステートメントのLIMIT またはTOP 句で指定されたオフセット。例えば、この例では10 です。 |
isjoin | クエリが結合かどうか。 |
jointable | 結合するテーブル。 |
isschemaonly | クエリがスキーマ情報のみを取得するかどうか。 |