- カテゴリ:
変換関数 、 半構造化データ関数と構造化データ関数 (キャスト)
TO_XML¶
VARIANT を値の XML 表現を含む VARCHAR に変換します。入力が NULL の場合は、結果も NULL です。
構文¶
TO_XML( <expression> )
引数¶
expression
VARIANT に評価される式、または VARIANT に キャスト できる式です。
戻り値¶
戻り値のデータ型は VARCHAR です。
使用上の注意¶
この関数の一般的な使用法には次が含まれます。
最初に挿入された XML 形式の値と一致する XML 形式の値を含む文字列の生成。
半構造化された値(必ずしも元は XML としてフォーマットされている必要なし)の XML 形式値への変換。たとえば、 TO_XML を使用して、元は JSON としてフォーマットされていた値の XML 互換表現を生成できます。
入力
expression
が VARIANT に評価されない場合、Snowflakeは式の結果を VARIANT に暗黙的に キャスト します。他のすべてのSnowflakeデータ型は VARIANT にキャストできるため、これは、どのようなデータ型の値でも TO_XML に渡して XML 形式の文字列に変換できることを意味します。(GEOGRAPHY データ型は部分的な例外です。型 GEOGRAPHYの値で TO_XML を呼び出すには、 GEOGRAPHY 値を VARIANT に明示的にキャストする必要があります。)値が XML として発生しなかった場合、Snowflakeは XML 互換タグを生成します。これらのタグは、
type
属性を使用して、タグのコンテンツのSnowflakeデータ型を指定する場合があります。以下は、Snowflakeによって生成されたタグの例です。最外側のタグペアは次のようになります。
<SnowflakeData type="OBJECT"> </SnowflakeData>
タグの
type
属性で指定されたデータ型は異なる場合があります。OBJECT の場合、キーと値の各ペアのタグはキーに基づいています。例:
<key1 type="VARCHAR">value1</key1>
ARRAY の場合、配列の各要素は次のようなタグペアになります。
<e type="VARCHAR"> </e>
次に、キーと値のペア2つを含む単純な OBJECT の XML の包括的な例を示します。
<SnowflakeData type="OBJECT"> <key1 type="VARCHAR">value1</key1> <key2 type="VARCHAR">value2</key2> </SnowflakeData>
次に、 VARCHAR 値2つを含む単純な ARRAY の XML の包括的な例を示します。
<SnowflakeData type="ARRAY"> <e type="VARCHAR">v1</e> <e type="VARCHAR">v2</e> </SnowflakeData>
例¶
この例は、 PARSE_XML を呼び出して、 XML 形式のデータを OBJECT にロードしている場合の関数の使用方法を示しています。
テーブルとデータを作成します。
CREATE TABLE xml2 (x OBJECT); INSERT INTO xml2 (x) SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');TO_XML() および TO_VARCHAR() 関数を呼び出します。
SELECT x, TO_VARCHAR(x), TO_XML(x) FROM xml2; +---------------------------+--------------------------------------+--------------------------------------+ | X | TO_VARCHAR(X) | TO_XML(X) | |---------------------------+--------------------------------------+--------------------------------------| | <note> | <note><body>Sample XML</body></note> | <note><body>Sample XML</body></note> | | <body>Sample XML</body> | | | | </note> | | | +---------------------------+--------------------------------------+--------------------------------------+
次の例に示すように、XML 形式のデータとして生成されなかったデータを使用して TO_XML() を呼び出すこともできます。
以下は、単純な OBJECT を作成してから、対応する XML を生成します。XML 出力には、キーと値のペア内にある値のデータ型、および全体的な値(OBJECT)のデータ型に関する情報が含まれています。
CREATE TABLE xml_03 (object_col_1 OBJECT); INSERT INTO xml_03 (object_col_1) SELECT OBJECT_CONSTRUCT('key1', 'value1', 'key2', 'value2');SELECT object_col_1, TO_XML(object_col_1) FROM xml_03; +---------------------+-------------------------------------------------------------------------------------------------------------------+ | OBJECT_COL_1 | TO_XML(OBJECT_COL_1) | |---------------------+-------------------------------------------------------------------------------------------------------------------| | { | <SnowflakeData type="OBJECT"><key1 type="VARCHAR">value1</key1><key2 type="VARCHAR">value2</key2></SnowflakeData> | | "key1": "value1", | | | "key2": "value2" | | | } | | +---------------------+-------------------------------------------------------------------------------------------------------------------+
以下は、単純な ARRAY を作成してから、対応する XML を生成します。XML 出力には、配列要素のデータ型と全体的な値(ARRAY)のデータ型に関する情報が含まれています。
CREATE TABLE xml_04 (array_col_1 ARRAY); INSERT INTO xml_04 (array_col_1) SELECT ARRAY_CONSTRUCT('v1', 'v2');SELECT array_col_1, TO_XML(array_col_1) FROM xml_04; +-------------+----------------------------------------------------------------------------------------------+ | ARRAY_COL_1 | TO_XML(ARRAY_COL_1) | |-------------+----------------------------------------------------------------------------------------------| | [ | <SnowflakeData type="ARRAY"><e type="VARCHAR">v1</e><e type="VARCHAR">v2</e></SnowflakeData> | | "v1", | | | "v2" | | | ] | | +-------------+----------------------------------------------------------------------------------------------+
次のコードは、 JSON 形式のデータを挿入してから、対応する XML を生成します。
CREATE TABLE xml_05 (json_col_1 VARIANT); INSERT INTO xml_05 (json_col_1) SELECT PARSE_JSON(' { "key1": ["a1", "a2"] } ');SELECT json_col_1, TO_JSON(json_col_1), TO_XML(json_col_1) FROM xml_05; +-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+ | JSON_COL_1 | TO_JSON(JSON_COL_1) | TO_XML(JSON_COL_1) | |-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------| | { | {"key1":["a1","a2"]} | <SnowflakeData type="OBJECT"><key1 type="ARRAY"><e type="VARCHAR">a1</e><e type="VARCHAR">a2</e></key1></SnowflakeData> | | "key1": [ | | | | "a1", | | | | "a2" | | | | ] | | | | } | | | +-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+