首页 > 解决方案 > 获取雪花内部 stageInfo

问题描述

我正在尝试构建一个可以将数据流直接发送到雪花的工具。

我不想使用外部阶段并将其存储在我的 S3 存储桶中。

查看 Snowflake NodeJS 连接器的内部工作原理,我发现了 Snowflake StageInfo

  this.createClient = function (stageInfo, useAccelerateEndpoint)
  {
    var stageCredentials = stageInfo['creds'];
    var securityToken = stageCredentials['AWS_TOKEN'];

stageInfo 如下所示:

    const s3 = {
      locationType: 'S3',
      location: 'sfc-eu-ds1-9-customer-stage/xseh-s-eusb3446/stages/90eb373c-a612-4e37-854c-9f07ff16b2bd/',
      path: 'stages/90eb373c-a612-4e37-854c-9f07ff16b2bd/',
      region: 'eu-central-1',
      storageAccount: null,
      isClientSideEncrypted: true,
      creds: {
        AWS_KEY_ID: '',
        AWS_SECRET_KEY: '',
        AWS_TOKEN: '',
        AWS_ID: '',
        AWS_KEY: '',
      },
      presignedUrl: null,
      endPoint: null,
    };

然后,我使用调试器获取了这些凭据,并使用 S3 上传工具自行开始上传,并将其放在一起生成流:

    const upload = new Upload({
      client: new S3Client({
        credentials: {
          accessKeyId: s3.creds.AWS_KEY_ID,
          secretAccessKey: s3.creds.AWS_SECRET_KEY,
          sessionToken: s3.creds.AWS_TOKEN,
        },
        region: s3.region,
      }),
      params: {
        Bucket: s3.location.split('/')[0],
        Key: key,
        Body: ws.pipe(new PassThrough()),
        ContentType: 'application/octet-stream',
        Metadata: {
          HTTP_HEADER_CONTENT_TYPE: 'application/octet-stream',
        },
      },
    });

    await upload.done();

效果很好,我实际上正在将文件上传到内部阶段。现在我的问题是我无法弄清楚如何stageInfo从 Snowflake 获取这些凭据。有人知道我需要发出什么请求才能stageInfo从他们那里得到这个吗?

标签: node.jssnowflake-cloud-data-platform

解决方案


推荐阅读