ヘッダーをスキップ
Oracle® Big Data Connectorsユーザーズ・ガイド
リリース4 (4.1)
E60568-01
  目次へ移動
目次
索引へ移動
索引

前
 
次
 

xml_query_as_primitive

Hiveプリミティブ値として問合せの結果を返します。各Hiveプリミティブ・データ・タイプには、そのタイプに対応する名前の個別の関数があります。

シグネチャ

xml_query_as_primitive (
   STRING query,
   {STRUCT | STRING} bindings,
} as primitive

説明

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を参照してください。

    問合せの結果の最初の項目が、プリミティブ・タイプの関数にマップされるXMLスキーマ・タイプにキャストされます。問合せで複数の項目が返される場合、最初の項目以外はすべて無視されます。

戻り値

アトミック値に変換されたHiveプリミティブ値(問合せによって返される最初の項目)。問合せの結果が空の場合、戻り値はNULLです。

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

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

hive> SELECT xml_query_as_string("x/y", "<x><y>hello</y></x>") FROM src LIMIT 1;
     .
     .
     .
"hello"

次は、他のプリミティブ関数を使用する文字列バインディングの例です。

hive> SELECT xml_query_as_int("x/y", "<x><y>123</y></x>") FROM src LIMIT 1;
     .
     .
     .
123
 
hive> SELECT xml_query_as_double("x/y", "<x><y>12.3</y></x>") FROM src LIMIT 1;
     .
     .
     .
12.3
 
hive> SELECT xml_query_as_boolean("x/y", "<x><y>true</y></x>") FROM src LIMIT 1;
     .
     .
     .
true
例2   STRUCTバインディングの使用

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

hive>
SELECT xml_query_as_string(
   "fn:parse-xml($data)/x/y[@id = $value]", 
   struct(
      "data", "<x><y id='1'>hello</y><z/><y id='2'>world</y></x>",
      "value", 2
   )
) FROM src LIMIT 1;
     .
     .
     .
world
例3   複数の問合せ結果を返す例

次の例は、問合せから最初の項目(hello)のみを返します。2番目の項目(world)は破棄されます。

hive> SELECT xml_query_as_string("x/y", "<x><y>hello</y><z/><y>world</y></x>") FROM src LIMIT 1;
     .
     .
     .
hello
例4   空の問合せ結果を返す例

次の例は、問合せの結果が空であるためNULLを返します。

hive> SELECT xml_query_as_string("x/foo", "<x><y>hello</y><z/><y>world</y></x>") FROM src LIMIT 1;
     .
     .
     .
NULL
例5   シリアライズされたXMLの取得

次の各例は、fn:serialize関数を使用して複雑なXML要素をSTRING値として返します。

hive> SELECT xml_query_as_string("fn:serialize(x/y[1])", "<x><y>hello</y><z/><y>world</y></x>") FROM src LIMIT 1;
     .
     .
     .
"<y>hello</y>"

hive> SELECT xml_query_as_string(
   "fn:serialize(<html><head><title>{$desc}</title></head><body>Name: {$name}</body></html>)", 
   struct(
      "desc", "Employee Details",
      "name", "John Doe"
   )
) FROM src LIMIT 1;
...
<html><head><title>Employee Details</title></head><body>Name: John Doe</body></html>
例6 Hadoop分散キャッシュへのアクセス

次の例では、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_as_string("fn:doc('test.xml')/x/y[1]", NULL) FROM src LIMIT 1;
     .
     .
     .
hello
例7   失敗した問合せの結果

次の例は、</invalidの山カッコがないためNULLを返します。XML解析エラーがログに書き込まれます。

Hive> SELECT xml_query_as_string("x/y", "<x><y>hello</invalid") FROM src LIMIT 1;
     .
     .
     .
NULL

次の例は、fooxs:floatとしてキャストできないためNULLを返します。キャスト・エラーがログに書き込まれます。

Hive> SELECT xml_query_as_float("x/y", "<x><y>foo</y></x>") FROM src LIMIT 1;
     .
     .
     .
NULL