問合せの結果をSTRING値の配列として返します。
説明
XQueryまたはXPath式。これは、関数が最初に評価されるときのみ読み込まれるため、定数値である必要があります。最初の問合せ文字列がコンパイルされ、後続のすべての呼出しで再使用されます。
Hadoop分散キャッシュおよびHTTPリソース(http://...)に格納されているファイルにアクセスできます。XMLドキュメントの場合はXQueryのfn:doc関数を使用し、プレーン・テキスト・ファイルにアクセスするにはfn:unparsed-textおよびfn:parsed-text-lines関数を使用します。例4を参照してください。
問合せのコンパイル中にエラーが発生した場合は、関数でエラーが発生します。問合せの評価中にエラーが発生した場合、エラーは(生成されずに)ログに記録され、空の配列が返されます。
問合せで処理される入力。値は、XML STRINGまたは変数値のSTRUCTです。
例
次の例では、入力XML文字列を解析し、問合せx/yの初期コンテキスト項目にバインドします。
hive> SELECT xml_query("x/y", "<x><y>hello</y><z/><y>world</y></x>") FROM src LIMIT 1; . . . ["hello","world"]
次の例では、2番目の引数は、2つの問合せ変数$dataと$valueを定義するSTRUCTです。STRUCTの変数の値は、「データ型変換」で説明されているように、XMLスキーマ・タイプに変換されます。
hive> 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"]
次の例では、fn:serialize関数を使用して、シリアライズされたXMLを返します。
hive> 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>"]
次の例では、test.xmlという名前のファイルを分散キャッシュに追加し、fn:doc関数を使用してそれを問い合せます。ファイルには、次の値が格納されます。
<x><y>hello</y><z/><y>world</y></x>
hive> ADD FILE test.xml; Added resource: test.xml hive> SELECT xml_query("fn:doc('test.xml')/x/y", NULL) FROM src LIMIT 1; . . . ["hello","world"]
次の例は、入力XMLが無効であるため、空の配列を返します。XML解析エラーがログに書き込まれます。
hive> SELECT xml_query("x/y", "<x><y>hello</y></invalid") FROM src LIMIT 1;
.
.
.
[]