TO_FILE

ファイルの場所またはメタデータから FILE タイプの値を構築します。

構文

次のいずれかを使用します。

TO_FILE( <stage_name>, <relative_path> ) TO_FILE( <file_url> ) TO_FILE( <metadata> )

引数

次を指定して、ファイルを指定します。

  • stage_name および :samp:`{relative_path}`の両方。

  • file_url

  • metadata

一度に使用できるメソッドは1つだけです。

stage_name

ファイルが文字列として '@stage_name' の形式で配置されているステージの名前。

relative_path

文字列として stage_name で指定されたステージ上のファイルへのパス。

file_url

有効なステージまたはスコープ付きファイル URL を文字列で指定します。

metadata

OBJECT に必要なFILE 属性を含むもの。FILE には CONTENT_TYPE、 SIZE、ETAGおよび LAST_MODIFIED フィールドが必要です。また、次のいずれかの方法でファイルの場所を指定する必要があります。

  • STAGE と RELATIVE_PATH の両方

  • STAGE_FILE_URL

  • SCOPED_FILE_URL

戻り値

ステージングされたファイルを表している FILE

使用上の注意

次の場合、エラーが発生します。

  • 指定された URL は無効である。

  • ファイルは、ユーザーにアクセス権限がないステージにあります。

  • 提供されたメタデータに必須である FILE フィールドが含まれていない。

FILE を使用した TO_FILEオブジェクトを作成する

TO_FILE関数ステージ名と相対パスの簡単な使用法 :

SELECT TO_FILE('@mystage', 'image.png'); 
Copy

結果:

+-----------------------------------------------------+ | TO_FILE('@MYSTAGE', 'IMAGE.PNG') | |-----------------------------------------------------| | { | | "CONTENT_TYPE": "image/png", | | "ETAG": "2859efde6e26491810f619668280a2ce", | | "LAST_MODIFIED": "Thu, 18 Sep 2025 09:02:00 GMT", | | "RELATIVE_PATH": "image.png", | | "SIZE": 23698, | | "STAGE": "@MYDB.MYSCHEMA.MYSTAGE" | | } | +-----------------------------------------------------+ 

TO_FILE 関数をステージングされたファイル URL で使用する簡単な方法:

SELECT TO_FILE(BUILD_STAGE_FILE_URL('@mystage', 'image.png')); 
Copy

結果:

+--------------------------------------------------------------------------------------------------------------------+ | TO_FILE(BUILD_STAGE_FILE_URL('@MYSTAGE', 'IMAGE.PNG')) | |--------------------------------------------------------------------------------------------------------------------| | { | | "CONTENT_TYPE": "image/png", | | "ETAG": "..." | | "LAST_MODIFIED": "Wed, 11 Dec 2024 20:24:00 GMT", | | "RELATIVE_PATH": "image.png", | | "SIZE": 105859, | | "STAGE": "@MYDB.MYSCHEMA.MYSTAGE", | | "STAGE_FILE_URL": "https://snowflake.account.snowflakecomputing.com/api/files/MYDB/MYSCHEMA/MYSTAGE/image.png" | | } | +--------------------------------------------------------------------------------------------------------------------+ 

または、ステージのディレクトリにあるファイルからFILE_URLを使用します。

SELECT TO_FILE(FILE_URL) FROM DIRECTORY(@mystage) LIMIT 1; 
Copy
+--------------------------------------------------------------------------------------------------------------------+ | TO_FILE(FILE_URL) | |--------------------------------------------------------------------------------------------------------------------| | { | | "CONTENT_TYPE": "image/png", | | "ETAG": "..." | | "LAST_MODIFIED": "Wed, 11 Dec 2024 20:24:00 GMT", | | "RELATIVE_PATH": "image.png", | | "SIZE": 105859, | | "STAGE": "@MYDB.MYSCHEMA.MYSTAGE", | | "STAGE_FILE_URL": "https://snowflake.account.snowflakecomputing.com/api/files/MYDB/MYSCHEMA/MYSTAGE/image.png" | | } | +--------------------------------------------------------------------------------------------------------------------+ 

この例では、スコープ付きファイル URL を使って TO_FILE 関数を直接使用しています。

SELECT TO_FILE(`https://snowflake.account.snowflakecomputing.com/api/files/01ba4df2-0100-0001-0000-00040002e2b6/299017/Y6JShH6KjV`); +------------------------------------------------------------------------------------------------------------------------------------------------+ | TO_FILE(https://snowflake.account.snowflakecomputing.com/api/files/01ba4df2-0100-0001-0000-00040002e2b6/299017/Y6JShH6KjV | |------------------------------------------------------------------------------------------------------------------------------------------------| | { | | "CONTENT_TYPE": "image/png", | | "ETAG": "..." | | "LAST_MODIFIED": "Wed, 11 Dec 2024 20:24:00 GMT", | | "SCOPED_FILE_URL": "https://snowflake.account.snowflakecomputing.com/api/files/01ba4df2-0100-0001-0000-00040002e2b6/299017/Y6JShH6KjV", | | "SIZE": 105859 | | } | +-----------------------------------------------------------------------------------------------------------------------------------------------+| 
Copy

これは、必要なメタデータを含むオブジェクトから FILE を構築する例を示しています。

SELECT TO_FILE(OBJECT_CONSTRUCT('STAGE', 'MYSTAGE', 'RELATIVE_PATH', 'image.png', 'ETAG', '<ETAG value>', 'LAST_MODIFIED', 'Wed, 11 Dec 2024 20:24:00 GMT', 'SIZE', 105859, 'CONTENT_TYPE', 'image/png')); +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ | TO_FILE(OBJECT_CONSTRUCT('STAGE', 'MYSTAGE', 'RELATIVE_PATH', 'IMAGE.PNG', 'ETAG', '<ETAG value>', 'LAST_MODIFIED', 'WED, 11 DEC 2024 20:24:00 GMT', 'SIZE', 105859, 'CONTENT_TYPE', 'IMAGE/PNG')) | |----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------| | { | | "CONTENT_TYPE": "image/png", | | "ETAG": "<ETAG value>>" | | "LAST_MODIFIED": "Wed, 11 Dec 2024 20:24:00 GMT", | | "RELATIVE_PATH": "image.png", | | "SIZE": 105859, | | "STAGE": "@MYDB.MYSCHEMA.MYSTAGE" | | } | +----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ 
Copy

テーブルに FILE を追加する

次の例は、FILEを作成してテーブルに保存し、その列を使用して、Parquetからの保存やロード、SnowPipe、データセット、マテリアライズドビュー、動的テーブル、およびTime Travelによるクローニング方法など、さまざまな操作を実行する方法を示しています。

FILE 列を持つテーブルの作成から始めます。

CREATE OR REPLACE TABLE sample_table (a INT, f FILE NOT NULL); DESCRIBE TABLE sample_table; INSERT INTO sample_table SELECT 1, TO_FILE('@mystage', 'image.png'); INSERT INTO sample_table SELECT 1, TO_FILE('@mystage', relative_path) FROM DIRECTORY('@mystage'); SELECT * FROM sample_table WHERE fl_get_file_type(f) = 'image'; 
Copy

FILE 列を含むテーブルを記述するには、Parquetファイルとしてステージにアップロードし、バックグラウンドにロードします。

-- Write to stage as Parquet CREATE OR REPLACE STAGE test_stage_parquet; CREATE OR REPLACE FILE FORMAT parquet_format TYPE = 'PARQUET' USE_LOGICAL_TYPE = TRUE; COPY INTO @test_stage_parquet/file_copy.parquet FROM sample_table FILE_FORMAT = (FORMAT_NAME = parquet_format) HEADER = TRUE ->> SELECT "rows_unloaded" FROM $1; ALTER STAGE test_stage_parquet SET DIRECTORY = (ENABLE=TRUE); ALTER STAGE test_stage_parquet REFRESH; -- Read Parquet files back from stage SELECT * FROM @TEST_STAGE_PARQUET/file_copy.parquet_0_0_0.snappy.parquet(FILE_FORMAT => parquet_format); SELECT * FROM @TEST_STAGE_PARQUET (PATTERN => '.*.parquet', FILE_FORMAT => parquet_format); 
Copy

Parquetファイルからデータセットを作成します。

CREATE OR REPLACE DATASET mydataset; ALTER DATASET mydataset ADD VERSION 'v1' FROM (SELECT * FROM @TEST_STAGE_PARQUET/file_copy.parquet_0_0_0.snappy.parquet( FILE_FORMAT => my_parquet_format)) COMMENT = 'test dataset'; 
Copy

Parquetファイルをテーブルにコピーします。

CREATE OR REPLACE TABLE t1_copy_parquet (a INT, f OBJECT NOT NULL); COPY INTO t1_copy_parquet FROM @test_stage_parquet FILE_FORMAT = (FORMAT_NAME = parquet_format) MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE; SELECT FL_GET_STAGE(f), FL_GET_RELATIVE_PATH(f) FROM t1_copy_parquet; 
Copy

Snowpipe を作成します。

CREATE OR REPLACE TABLE t1_copy_parquet_snowpipe (f OBJECT NOT NULL); CREATE OR REPLACE PIPE test_pipe AS COPY INTO t1_copy_parquet_snowpipe FROM @test_stage_parquet FILE_FORMAT = (FORMAT_NAME = my_parquet_format) MATCH_BY_COLUMN_NAME = CASE_INSENSITIVE; ALTER PIPE TEST_PIPE REFRESH; 
Copy

マテリアライズドビュー、またはテーブルから動的テーブルを作成します。

CREATE OR REPLACE MATERIALIZED VIEW MV AS SELECT * FROM SAMPLE_TABLE; CREATE OR REPLACE DYNAMIC TABLE sample_dynamic_table WAREHOUSE = my_warehouse TARGET_LAG = '60 minutes' AS SELECT f FROM sample_table; 
Copy

テーブル列の配列にファイルを格納します。

CREATE OR REPLACE TABLE files_array_table(files ARRAY); INSERT INTO files_array_table SELECT ARRAY_CONSTRUCT(TO_FILE('@mystage', 'image.png')); CREATE OR REPLACE TABLE files_array_table_copy(files ARRAY); INSERT INTO files_array_table_copy SELECT files[0] FROM files_array_table; 
Copy

エラーの例

これらの例は、TO_FILEの使用における一般的な間違いを説明しており、その結果として関数がエラーを発生させます。

次の例ではメタデータオブジェクトから、 FILE を作成しますが、必須のフィールドを省略しています。

SELECT TO_FILE(OBJECT_CONSTRUCT('RELATIVE_PATH', 'image.png', 'ETAG', '<ETAG value>', 'LAST_MODIFIED', 'Wed, 11 Dec 2024 20:24:00 GMT', 'SIZE', 105859, 'CONTENT_TYPE', 'image/png')); 
Copy
Invalid file metadata. Must provide (STAGE and RELATIVE_PATH), SCOPED_FILE_URL, or STAGE_FILE_URL. 

次の例は似ていますが、必須の ETAG フィールドが省略されています。

SELECT TO_FILE(OBJECT_CONSTRUCT('STAGE', 'MYSTAGE', 'RELATIVE_PATH', 'image.png', 'LAST_MODIFIED', 'Wed, 11 Dec 2024 20:24:00 GMT', 'SIZE', 105859, 'CONTENT_TYPE', 'image/png')); 
Copy
Invalid file metadata. Missing required fields: ETAG. 

次の例は、 GROUPBY, ORDERBYおよび CLUSTERBY または FILE 列に対する試行を示しています。FILE 値は比較できないためサポートされていません。

SELECT f, count(*) FROM sample_table GROUP BY f; -- Expressions of type FILE cannot be used as GROUP BY keys SELECT * FROM sample_table ORDER by f; -- Expressions of type FILE cannot be used as ORDER BY keys CREATE OR REPLACE TABLE cluster_to_file (a int, url string) CLUSTER BY (to_file(url)); -- Unsupported type 'FILE' for clustering keys 
Copy

この最後の例では、誤ったステージ名、特にステージ名の末尾にスラッシュを使用しています。Snowflakeはすでにステージ名と相対パスの間にスラッシュを追加しているため、これにより2つのスラッシュが作成され、結合されたステージパスはファイルを指定しません。

SELECT TO_FILE('@mystage/', 'image.png'); 
Copy
Remote file '@mystage//image.png' was not found. There are several potential causes. The file might not exist. The required credentials may be missing or invalid. If you are running a copy command, please make sure files are not deleted when they are being loaded or files are not being loaded into two different tables concurrently with auto purge option. 

既知の制限

  • TO_FILE は、 INSERT INTO TABLE <t> VALUES 句では使用できません。代わりに、 INSERT INTO TABLE <t> SELECT を使用します。