如何将文件从s3加载到powerBi?

时间:2019-05-21 15:17:18

标签: amazon-s3 powerbi

我想从s3的存储桶中获取一些csv文件。由于没有连接器,我需要通过查询才能达到s3。如何设置查询?

试图使用邮递员,并从邮递员的预览中复制信息,但无济于事。

Postman Headers and url

现在,我需要将这些标头从逻辑上放入powerBI,但是,powerBi无法像邮递员那样进行转换。有解决方案吗?

powerBi query editor

2 个答案:

答案 0 :(得分:0)

好吧,所以我终于在powerBI中使用python脚本成功了。

由于powerBI可以使用pyhton,因此实际上可以直接从s3导入文件或对象。我需要一个csv文件,并使用此代码来做到这一点:

import boto3
import pandas as pd
import io

bucket = 'name of your bucket'
key = 'name of your file'

s3 = boto3.client('s3')
f = s3.get_object(Bucket=bucket, Key=key)
shape = pd.read_csv(io.BytesIO(f['Body'].read()), header=0, index_col=0)
shape = shape.apply(lambda x: x.fillna(0))
print(shape)

这使我可以将对象转换为powerBI能够读取的熊猫数据框。 确保检查powerBI是否使用了正确的python环境,并安装了pnada和io,并且boto3带有通过awscli在aws中注册的凭证或在文件凭证中的凭证(该区域同样适用)。

答案 1 :(得分:0)

只要使用PowerBI查询的人的计算机上都具有AWS CLI,您接受的答案就很好。我的用例是将要使用此PowerBI模板的个人要登录并从该点开始进行身份验证。

通过PowerBI访问S3存储桶的另一种方法是按照this question on the Power BI forums使用AWS API Gateway和Lambda函数创建预签名URL。这是来自用户spinwards的相关答案:

  
      
  1. 创建一个新的Lambda函数...目前可以为空
  2.   
  3. 在API网关中设置新的API
  4.   
  5. 创建一个新的GET方法      
        
    • 3.1选择Lambda函数作为集成类型
    •   
    • 3.2选择“使用Lambda代理集成”选项
    •   
    • 3.3选择区域并输入您在步骤1中创建的lambda函数的名称
    •   
  6.   
  7. 编辑您的lambda函数。      
        
    • 4.1使用AWS开发工具包,为文件生成带有预签名密钥的url
    •   
    • 4.2从步骤4.1返回303重定向到网址
    •   
  8.   
     

这是python 2.7中的lambda函数的示例:

table2_id
  

您可以使用此PowerBI查询作为起点:

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

一旦所有事情都用一个文件处理,就可以参数化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查询中包含并重构python v4 signature examples from AWS documentation pages。这将允许在计算机上没有AWS CLI的情况下进行呼叫,但是要求用户输入其访问密钥和秘密访问密钥。据我所知,PowerBI中的参数不会自动暴露给python查询,因此我正在研究通过创建包含它们的数据集as per this stackoverflow question and answer.

来公开这些参数