カテゴリ:

変換関数半構造化データ関数と構造化データ関数 (キャスト)

TO_XML

VARIANT を値の XML 表現を含む VARCHAR に変換します。入力が NULL の場合は、結果も NULL です。

こちらもご参照ください。

CHECK_XMLPARSE_XMLXMLGET

構文

TO_XML( <expression> )
Copy

引数

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>
    
    Copy

    タグの type 属性で指定されたデータ型は異なる場合があります。

    OBJECT の場合、キーと値の各ペアのタグはキーに基づいています。例:

    <key1 type="VARCHAR">value1</key1>
    
    Copy

    ARRAY の場合、配列の各要素は次のようなタグペアになります。

    <e type="VARCHAR"> </e>
    
    Copy

    次に、キーと値のペア2つを含む単純な OBJECT の XML の包括的な例を示します。

    <SnowflakeData type="OBJECT">
        <key1 type="VARCHAR">value1</key1>
        <key2 type="VARCHAR">value2</key2>
    </SnowflakeData>
    
    Copy

    次に、 VARCHAR 値2つを含む単純な ARRAY の XML の包括的な例を示します。

    <SnowflakeData type="ARRAY">
        <e type="VARCHAR">v1</e>
        <e type="VARCHAR">v2</e>
    </SnowflakeData>
    
    Copy

この例は、 PARSE_XML を呼び出して、 XML 形式のデータを OBJECT にロードしている場合の関数の使用方法を示しています。

テーブルを作成してデータを挿入します。

CREATE OR REPLACE TABLE xml_02 (x OBJECT);

INSERT INTO xml_02 (x)
  SELECT PARSE_XML('<note> <body>Sample XML</body> </note>');
Copy

TO_XML および TO_VARCHAR 関数を呼び出します。

SELECT x, TO_VARCHAR(x), TO_XML(x) FROM xml_02;
Copy
+---------------------------+--------------------------------------+--------------------------------------+
| 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 OR REPLACE TABLE xml_03 (object_col_1 OBJECT);

INSERT INTO xml_03 (object_col_1)
  SELECT OBJECT_CONSTRUCT('key1', 'value1', 'key2', 'value2');
Copy
SELECT object_col_1, TO_XML(object_col_1)
  FROM xml_03;
Copy
+---------------------+-------------------------------------------------------------------------------------------------------------------+
| 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 OR REPLACE TABLE xml_04 (array_col_1 ARRAY);

INSERT INTO xml_04 (array_col_1)
  SELECT ARRAY_CONSTRUCT('v1', 'v2');
Copy
SELECT array_col_1, TO_XML(array_col_1)
  FROM xml_04;
Copy
+-------------+----------------------------------------------------------------------------------------------+
| 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 OR REPLACE TABLE xml_05 (json_col_1 VARIANT);

INSERT INTO xml_05 (json_col_1)
  SELECT PARSE_JSON(' { "key1": ["a1", "a2"] } ');
Copy
SELECT json_col_1,
       TO_JSON(json_col_1),
       TO_XML(json_col_1)
  FROM xml_05;
Copy
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+
| 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"    |                      |                                                                                                                         |
|   ]         |                      |                                                                                                                         |
| }           |                      |                                                                                                                         |
+-------------+----------------------+-------------------------------------------------------------------------------------------------------------------------+