跳到主要内容

上传文件至 Stage

Databend 推荐两种文件上传至 Stage 的方法:PRESIGN 和 PUT/GET 命令。这些方法可实现客户端与存储之间的直接数据传输,无需中间环节,从而减少 Databend 与存储之间的流量,节省成本。

Alt text

PRESIGN 方法会生成一个带签名且有时效性的 URL,客户端可用其安全地发起文件上传。该 URL 授予对指定 Stage 的临时访问权限,允许客户端直接传输数据而无需依赖 Databend 服务器全程参与,既提升安全性又提高效率。

若使用 BendSQL 管理 Stage 中的文件,可通过 PUT 命令上传文件,GET 命令下载文件。

  • 当前 GET 命令仅能下载 Stage 中的所有文件,无法单独下载特定文件。
  • 这些命令仅适用于 BendSQL,且当 Databend 使用文件系统作为存储后端时,GET 命令将无法使用。

使用预签名 URL 上传

以下示例展示如何通过预签名 URL 将示例文件 (books.parquet) 上传至用户 Stage、内部 Stage 及外部 Stage。

PRESIGN UPLOAD @~/books.parquet;

结果:

┌────────┬────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ Name │ Value │
├────────┼────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┤
│ method │ PUT │
│ headers│ {"host":"s3.us-east-2.amazonaws.com"} │
│ url │ https://s3.us-east-2.amazonaws.com/databend-toronto/stage/user/root/books.parquet?X-Amz-Algorithm... │
└────────┴────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
curl -X PUT -T books.parquet "https://s3.us-east-2.amazonaws.com/databend-toronto/stage/user/root/books.parquet?X-Amz-Algorithm=... ...

检查已暂存文件:

LIST @~;

结果:

┌───────────────┬──────┬──────────────────────────────────────┬─────────────────────────────────┬─────────┐
│ name │ size │ md5 │ last_modified │ creator │
├───────────────┼──────┼──────────────────────────────────────┼─────────────────────────────────┼─────────┤
│ books.parquet │ 998 │ 88432bf90aadb79073682988b39d461c │ 2023-06-27 16:03:51.000 +0000 │ │
└───────────────┴──────┴──────────────────────────────────────┴─────────────────────────────────┴─────────┘

使用 PUT 命令上传文件

以下示例展示如何使用 BendSQL 通过 PUT 命令将示例文件 (books.parquet) 上传到用户级 stage、内部 stage 和外部 stage。

PUT fs:///Users/eric/Documents/books.parquet @~

结果:

┌───────────────────────────────────────────────┐
│ file │ status │
├─────────────────────────────────────┼─────────┤
│ /Users/eric/Documents/books.parquet │ SUCCESS │
└───────────────────────────────────────────────┘

检查暂存文件:

LIST @~;

结果:

┌────────────────────────────────────────────────────────────────────────┐
│ name │ size │ ··· │ last_modified │ creator │
├───────────────┼────────┼─────┼──────────────────────┼──────────────────┤
│ books.parquet │ 998 │ ... │ 2023-09-04 03:27:... │ NULL │
└────────────────────────────────────────────────────────────────────────┘

使用 PUT 命令上传目录

您还可以使用带通配符的 PUT 命令上传目录中的多个文件。这在需要一次性暂存大量文件时非常有用。

PUT fs:///home/ubuntu/datas/event_data/*.parquet @your_stage;

结果:

┌───────────────────────────────────────────────────────┐
│ file │status │
├─────────────────────────────────────────────┼─────────┤
│ /home/ubuntu/datas/event_data/file1.parquet │ SUCCESS │
│ /home/ubuntu/datas/event_data/file2.parquet │ SUCCESS │
│ /home/ubuntu/datas/event_data/file3.parquet │ SUCCESS │
└───────────────────────────────────────────────────────┘

使用 GET 命令下载文件

以下示例展示如何使用 BendSQL 通过 GET 命令从用户级 stage、内部 stage 和外部 stage 下载示例文件 (books.parquet)。

LIST @~;

结果:

┌────────────────────────────────────────────────────────────────────────┐
│ name │ size │ ··· │ last_modified │ creator │
├───────────────┼────────┼────────────┼─────┼──────────────────────┼──────────────────┤
│ books.parquet │ 998 │ ... │ 2023-09-04 03:27:... │ NULL │
└────────────────────────────────────────────────────────────────────────┘
GET @~/ fs:///Users/eric/Downloads/fromStage/;

结果:

┌─────────────────────────────────────────────────────────┐
│ file │ status │
├───────────────────────────────────────────────┼─────────┤
│ /Users/eric/Downloads/fromStage/books.parquet │ SUCCESS │
└─────────────────────────────────────────────────────────┘