【问题标题】:How to read CSV file and insert data into PostgreSQL using Mule ESB, Mule Studio如何使用 Mule ESB、Mule Studio 读取 CSV 文件并将数据插入 PostgreSQL
【发布时间】:2012-12-04 09:06:57
【问题描述】:

我是 Mule Studio 的新手。

我遇到了一个问题。我有一个要求,我需要使用 Mule Studio 将 CSV 文件中的数据插入 PostgreSQL 数据库。

我正在使用 Mule Studio CE(版本:1.3.1)。我在 Google 中查看了 ed,发现我们可以使用 Data-mapper 来执行此操作。但它只适用于 EE。所以我不能使用它。

另外我上网查了一下,发现了一篇文章Using Mule Studio to read Data from PostgreSQL(Inbound) and write it to File (Outbound) - Step by Step approach

这似乎可行,但我的要求与给出的文章正好相反。我需要文件作为入站数据,而数据库作为出站组件。

这样做的方法是什么?

任何分步帮助(例如要使用的组件)和指导将不胜感激。

【问题讨论】:

    标签: mule mule-studio


    【解决方案1】:

    这是一个插入两列 CSV 文件的示例:

    <configuration>
        <expression-language autoResolveVariables="true">
            <import class="org.mule.util.StringUtils" />
            <import class="org.mule.util.ArrayUtils" />
        </expression-language>
    </configuration>
    
    <spring:beans>
        <spring:bean id="jdbcDataSource" class=" ... your data source ... " />
    </spring:beans>
    
    <jdbc:connector name="jdbcConnector" dataSource-ref="jdbcDataSource">
        <jdbc:query key="insertRow"
            value="insert into my_table(col1, col2) values(#[message.payload[0]],#[message.payload[1]])" />
    </jdbc:connector>
    
    <flow name="csvFileToDatabase">
        <file:inbound-endpoint path="/tmp/mule/inbox"
            pollingFrequency="5000" moveToDirectory="/tmp/mule/processed">
             <file:filename-wildcard-filter pattern="*.csv" />
        </file:inbound-endpoint>
    
        <!-- Load all file in RAM - won't work for big files! -->
        <file:file-to-string-transformer />
        <!-- Split each row, dropping the first one (header) -->
        <splitter
            expression="#[rows=StringUtils.split(message.payload, '\n\r');ArrayUtils.subarray(rows,1,rows.size())]" />
        <!-- Transform CSV row in array -->
        <expression-transformer expression="#[StringUtils.split(message.payload, ',')]" />
        <jdbc:outbound-endpoint queryKey="insertRow" />
    </flow>
    

    【讨论】:

    • 嗨,这很有效。我只想再问 2 个问题。 a)我如何验证是否正在解析有效的 .csv 文件(仅扩展检查是可以的),然后继续下一步。 (b) 如何过滤标题行?
    • 查看了我添加filename-wildcard-filter 以仅选择*.csv 文件的答案,删除拆分数组(标题)的第一行并使用file-to-string-transformer(比object-to-string-transformer 更正确)。
    • 有人可以指导如何验证 CSV 吗?我的意思是检查是否有任何数据不为空等等。
    【解决方案2】:

    为了使用 Mule 读取 CSV 文件并将数据插入 PostgreSQL,您需要遵循以下脚步: 您需要具备以下条件作为先决条件

    • PostgreSQL
    • PostgreSQL JDBC 驱动程序
    • Anypoint Studio IDE 和
    • 要在 PostgreSQL 中创建的数据库

    然后在 Studio 的 Global Element Properties 中配置 Postgre SQL JDBC Driver 在 Anypoint Studio 中创建 Mule Flow,如下所示:

    • 第 1 步:将 CSV 文件源包装在文件组件中
    • 第 2 步:在对象数组和字符串之间进行转换
    • 第 3 步:拆分每一行
    • 第 4 步:在数组中转换 CSV 行
    • 第 5 步:转储到目标数据库

    【讨论】:

      【解决方案3】:

      我想推荐 Dataweave。

      步骤

      1. 使用 FTP 连接器/端点读取文件。

      2. 使用数据编织进行转换。

      3. 使用数据库连接器,将数据存储在数据库中。

      【讨论】:

      • 没有。 OP 明确想要一个仅限 CE 的解决方案。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-12-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-31
      • 2013-06-29
      相关资源
      最近更新 更多