Hiveプリミティブ値として問合せの結果を返します。各Hiveプリミティブ・データ・タイプには、そのタイプに対応する名前の個別の関数があります。
xml_query_as_string
xml_query_as_boolean
xml_query_as_tinyint
xml_query_as_smallint
xml_query_as_int
xml_query_as_bigint
xml_query_as_double
xml_query_as_float
説明
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_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番目の引数は、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
次の例は、問合せから最初の項目(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
次の例は、問合せの結果が空であるためNULL
を返します。
hive> SELECT xml_query_as_string("x/foo", "<x><y>hello</y><z/><y>world</y></x>") FROM src LIMIT 1;
.
.
.
NULL
次の各例は、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>
次の例では、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
次の例は、</invalid
の山カッコがないためNULL
を返します。XML解析エラーがログに書き込まれます。
Hive> SELECT xml_query_as_string("x/y", "<x><y>hello</invalid") FROM src LIMIT 1;
.
.
.
NULL
次の例は、foo
をxs:float
としてキャストできないためNULL
を返します。キャスト・エラーがログに書き込まれます。
Hive> SELECT xml_query_as_float("x/y", "<x><y>foo</y></x>") FROM src LIMIT 1;
.
.
.
NULL