amazon-s3 - 如何将我的文件从 s3 加载到 powerBi?
问题描述
我想从 s3 的存储桶中获取一些 csv 文件。由于没有连接器,我需要通过查询才能到达 s3。如何设置我的查询?
尝试使用邮递员并从邮递员的预览中复制信息,但无济于事。
现在我需要在逻辑上将这些标头放入 powerBI,但是,powerBi 不能像邮递员那样进行转换。有解决办法吗?
解决方案
只要使用 PowerBI 查询的人在其计算机上安装 AWS CLI,您接受的答案就很好。我的用例是,将要使用此 PowerBI 模板的个人想要登录并从那时起完成身份验证。
通过 PowerBI 访问 S3 存储桶的另一种选择是使用 AWS API Gateway 和 Lambda 函数来创建预签名 URL,根据Power BI 论坛上的这个问题。以下是用户spinwards的相关答案:
- 创建一个新的 Lambda 函数......它现在可以是空的
- 在 API Gateway 中设置新 API
- 创建一个新的 GET 方法
- 3.1 为集成类型选择 Lambda 函数
- 3.2 选择使用 Lambda 代理集成选项
- 3.3 选择区域并输入您在步骤 1 中创建的 lambda 函数的名称
- 编辑您的 lambda 函数。
- 4.1 使用 AWS 开发工具包,为您的文件生成一个带有预签名密钥的 url
- 4.2 从步骤 4.1 返回一个 303 重定向到 url
以下是 python 2.7 中的 lambda 函数示例:
bucket = 'bucket-name'
key = 'path-to-file'
client = boto3.client('s3')
link = client.generate_presigned_url(
'get_object',
{'Bucket': bucket, 'Key': key},
7200, 'GET')
return {
"statusCode": 303,
"headers": {'Location': link}
}
您可以将此 PowerBI 查询用作起点:
let
// Replace the URI with the "invoke url" of your API Gateway endpoint
// See: https://docs.aws.amazon.com/apigateway/latest/developerguide/how-to-call-api.html#how-to-call-api-console
uri = "https://your-web-api.execute-api.us-east-1.amazonaws.com/stage/endpoint",
// PowerBI should understand the 303 redirect and follow it to your presigned s3 url
// Make sure to set IsRetry to true so that PowerBI gets a fresh url with a
// fresh presigned key every time
raw = Web.Contents(uri, [IsRetry=true]),
// My file is a gzipped utf-8 tsv, so I need to decompress it
// and tell the csv parser the delimiter and encoding
binary = Binary.Decompress(raw, Compression.GZip),
csv = Csv.Document(binary, [
Delimiter="#(tab)",
extraValues=ExtraValues.Ignore,
Encoding=65001]) // 65001 is utf8
in
csv
使用单个文件完成所有工作后,您可以参数化您的 API 和 Lambda 函数以接受 s3 路径,以便您可以从 S3 账户中提取任何内容。
Spinwards 还提供以下有关身份验证的警告:
在将其推广到生产环境之前,您应该考虑某种身份验证。普通的 AWS IAM 身份验证令牌不能很好地与 PowerBI 配合使用,因此您需要为 API 网关使用自定义身份验证方法:https ://docs.aws.amazon.com/apigateway/latest/developerguide/use-custom -authorizer.html。我最终使用了基本身份验证,这不是世界上最强大的东西,但 API Gateway 使用 https,所以它应该足够安全。
因为 PowerBI 不自动支持 v4 签名身份验证,而且我的用户可能在他们的计算机上没有 CLI,所以我一直在试验的另一个选项是在我的 python 查询中包含和重构来自 AWS 文档页面的 python v4 签名示例。这将允许在机器上没有 AWS CLI 的情况下进行调用,但需要用户输入他们的访问密钥和秘密访问密钥。据我所知,PowerBI 中的参数不会自动暴露给 python 查询,因此我正在研究通过创建包含参数的数据集来暴露参数,如下所述:Power BI 参数是否暴露给 Python 全局变量
推荐阅读
- java - 泛型 - 定义地图
, MyClassB > 确保两者?是相同的? - ios - 你如何使用 ASWebAuthenticationSession、本机应用程序、https:需要重定向?
- windows - 如何(使用 New-GPLink)将 GPO 链接到封装在另一个组织单位中的组织单位
- apache-spark - 在 PySpark 中并行化 SparkSession
- sql - SQL 2018 工作室中的是/否列
- javascript - 需要帮助解决如何为 html/css 滑块添加更好的图像标题
- python - 您可以为字典中的项目分配多个值吗?
- sql - 我正在将以下 oracle 查询转换为 bigquery,但结果记录数不同
- java - 如何从 Java 中的 ByteBuffer 读取和存储 64 位 UNSIGNED long?存放在哪里,因为长时间无法容纳它?
- python - 将混合类型 DF 列中的浮点数转换为字符串使用科学记数法