代码之家  ›  专栏  ›  技术社区  ›  ddd

如何将数据从本地SQL Server推送到AWS上的Tableau Server

  •  1
  • ddd  · 技术社区  · 7 年前

    我们正在开发Tableau仪表板,并在AWS的EC2 windows实例上部署工作簿。其中一个数据源是防火墙内的公司SQL server。服务器由它管理,我们只有对其中一个数据库的读取权限。现在的解决方案是通过连接到公司的SQL server在Tableau桌面上本地构建工作簿。在将工作簿发布到Tableau server之前,将从数据源中提取数据。静态数据在发布时随工作簿一起上传。

    可能有一种方法可以直接从SQL server推送到AWS上的postgres。但是,由于我们对服务器没有太多控制权,加上IT人员可能不愿意将数据推送到外部,因此这将不是一个选项。我能想到的是:

    1. 从SQL server提取数据并另存为CSV文件。每个文件一个表。
    2. 在AWS windows实例上启用文件系统共享。因此,该实例可以直接从本地文件系统读取文件。
    3. 将数据从CSV加载到Postgres表。
    4. 在AWS上的Tableau服务器上设置数据连接,以从Postgres读取数据。

    我不知道其他人是否遇到过这样的情况,他们的解决方案是什么。但我认为这种情况并不罕见。一个改变是将本地Tableau桌面和AWS Tableau服务器连接到AWS上的Postgres。但不确定本地Tableau是否可以访问AWS上的Postgres。

    我愿意接受任何建议。

    2 回复  |  直到 3 年前
        1
  •  1
  •   Nick.Mc    7 年前

    A、 平台选择

    如果在AWS(例如Postgres)上使用SQL Server以外的数据库,则需要执行一次(或两次)转换:

    1. 我对Tableau了解不多,但如果它当前指向SQL Server,您可能需要某种转换才能将其指向Postgres

    仅这两个步骤就值得您研究SQL Express RDS。SQL Express没有许可成本,但显然windows有许可成本。您也可以在Linux上运行SQL Express,这将没有许可成本,但需要大量的磨蹭才能运行(即,我怀疑是否有SQL Express Linux RDS可用)

    B、 集成方法

    • 任何网络外部(即云上)从网络中提取数据的进程都需要打开防火墙。假设这不是一个选项,那么留给我们的只有来自prem的推送选项

    • 作为对这一点的补充,Power BI通过使用协调数据传输的桌面“网关”来实现其桌面数据集成,这意味着云Power BI不需要打开端口来获取所需的内容,它使用桌面网关将其推出

    • 要从SQL Server中获取数据并将其推送到云端,最简单的方法是使用BCP。EXE生成平面文件。如果要将其放入SQL Server,则应为本机格式(以节省复杂性)。如果这些要发送到Postgres,则应以制表符分隔

    • 如果这些文件正在上载到SQL Server,那么这只是另一个BCP命令,用于将本机文件推入SQL Server的表中(在此之前,您需要运行SQLCMD.EXE命令来截断目标表)

    因此,对于三个表,假设您安装了免费的*SQL Server客户端工具,您将有一个类似以下内容的批处理文件:

    REM STEP 1:  Clear staging folder
    DEL /Y C:\Staging\*.TXT
    
    REM STEP 2: Generate the export files
    BCP database.dbo.Table1 OUT C:\Staging\Table1.TXT -E -S LocalSQLServer -N
    BCP database.dbo.Table2 OUT C:\Staging\Table2.TXT -E -S LocalSQLServer -N
    BCP database.dbo.Table3 OUT C:\Staging\Table3.TXT -E -S LocalSQLServer -N
    
    
    REM STEP 3: Clear target tables
    REM Your SQL RDS is unlikely to support single sign on 
    REM so need to use user/pass here
    SQLCMD -U username -P password -S RDSSQLServerName -d databasename -Q"TRUNCATE TABLE Table1; TRUNCATE TABLE Table2; TRUNCATE TABLE Table3;"
    
    REM STEP 4: Push data in
    BCP database.dbo.Table1 IN C:\Staging\Table1.TXT -U username -P password -S RDSSQLServerName-N
    BCP database.dbo.Table2 IN C:\Staging\Table2.TXT -U username -P password -S RDSSQLServerName-N
    BCP database.dbo.Table3 IN C:\Staging\Table3.TXT -U username -P password -S RDSSQLServerName-N
    

    (我是 漂亮的 确保BCP和SQLCMD是免费的。。。不确定,但您当然可以下载免费的SQL Server工具并查看)

    您可以在集成中构建更多层次的复杂性:差异复制、重试等。但鉴于“影子IT状态”,这可能不值得

    还要注意的是,我认为AWS对数据上传收费,所以如果你每天都在复制1G数据库,那就加起来了。(Azure对上传不收费,但我相信你会用其他方式付费!)

        2
  •  1
  •   BryceH    7 年前

    对于这类问题,我强烈建议使用SymmetricDS- https://www.symmetricds.org/

    主要的警告是,SQL Server需要添加一些触发器来跟踪更改,但此时SymmetricDS将处理数据推送。