ヘッダーをスキップ
Oracle® Big Data Connectorsユーザーズ・ガイド
リリース2 (2.3)
E48215-03
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

xml_query

問合せの結果をSTRING値の配列として返します。

シグネチャ

xml_query(
   STRING query, 
   { STRING | STRUCT } bindings
) as ARRAY<STRING>

説明

query

XQueryまたはXPath式。これは、関数が最初に評価されるときのみ読み込まれるため、定数値である必要があります。最初の問合せ文字列がコンパイルされ、後続のすべての呼出しで再使用されます。

Hadoop分散キャッシュおよびHTTPリソース(http://...)に格納されているファイルにアクセスできます。XMLドキュメントの場合はXQueryのfn:doc関数を使用し、プレーン・テキスト・ファイルにアクセスするにはfn:unparsed-textおよびfn:parsed-text-lines関数を使用します。例4を参照してください。

問合せのコンパイル中にエラーが発生した場合は、関数でエラーが発生します。問合せの評価中にエラーが発生した場合、エラーは(生成されずに)ログに記録され、空の配列が返されます。

bindings

問合せで処理される入力。値は、XML STRINGまたは変数値のSTRUCTです。

  • STRING: 文字列は、問合せの初期コンテキスト項目にXMLとしてバインドされます。例1を参照してください。

  • STRUCT: 偶数個のフィールドで構成されるSTRUCT。フィールドの各ペアで、問合せの変数バインディング(名前, 値)が定義されます。名前フィールドのタイプはSTRINGである必要があり、値フィールドにはサポートされているプリミティブを指定できます。「データ型変換について」および例2を参照してください。

戻り値

STRING値のHive配列であり、一連のアトミック値に変換される問合せの結果です。問合せの結果が空の場合、戻り値は空の配列です。

例1   STRINGバインディングの使用

次の例では、入力XML文字列を解析し、問合せ"x/y"の初期コンテキスト項目にバインドします。

> SELECT xml_query("x/y", "<x><y>hello</y><z/><y>world</y></x>") FROM src LIMIT 1;
["hello", "world"]
例2   STRUCTバインディングの使用

次の例では、2番目の引数は、2つの問合せ変数$data$valueを定義するSTRUCTです。STRUCTの変数の値は、「データ型変換について」で説明されているように、XMLスキーマ・タイプに変換されます。

> SELECT xml_query(
  "fn:parse-xml($data)/x/y[@id = $value]", 
  struct(
     "data", "<x><y id='1'>hello</y><z/><y id='2'>world</y></x>",
     "value", 1
      )
  ) FROM src LIMIT 1;
["hello"]
例3   シリアライズされたXMLの取得

次の例では、fn:serialize関数を使用して、シリアライズされたXMLを返します。

> SELECT xml_query(
  "for $y in x/y 
  return fn:serialize($y)
  ",
  "<x><y>hello</y><z/><y>world</y></x>"
   ) FROM src LIMIT 1;
["<y>hello</y>","<y>world</y>"]
例4   Hadoop分散キャッシュへのアクセス

次の例では、test.xmlという名前のファイルを分散キャッシュに追加し、fn:doc関数を使用してそれを問い合せます。ファイルには、値<x><y>hello</y><z/><y>world</y></x>が含まれています。

> ADD FILE test.xml;
> SELECT xml_query("fn:doc('test.xml')/x/y", NULL) FROM src LIMIT 1;
["hello","world"]
例5   失敗した問合せの結果

次の例は、入力XMLが無効であるため、空の配列を返します。XML解析エラーがログに書き込まれます。

> SELECT xml_query("x/y", "<x><y>hello</y></invalid") FROM src LIMIT 1;
 []