1

我正在尝试执行用于创建表的 sql 语句(ExecuteSql proc),表的名称基于文件名属性,当执行 ExecuteSQl 时,它会创建表但不会将文件路由到任何关系。

我认为这部分是因为要在 CrateIO 中创建表,您需要输入“;” 在最后。如果我这样做,我也会得到一个错误。

有任何想法吗 ?

4

1 回答 1

2

ExecuteSQL 适用于返回 ResultSet 的查询。尝试使用 PutSQL 创建表(和其他 DDL 语句)。你也不应该需要分号,但你可以尝试两种方式来看看 CrateIO 喜欢什么。

编辑(回复评论):如果您在 ExecuteSQL 中指定查询,它可能看起来像:

CREATE TABLE ${filename} (myColumn1 STRING, myColumn2 INT, ...)

您可以在 GetFile 之后和 PutSQL 之前使用ReplaceText处理器执行类似的操作。ReplaceText 会将流文件的内容设置为您的 SQL 查询,这正是 PutSQL 想要的。

编辑 2:如果您想要自定义逻辑,您可以考虑使用脚本处理器与编写完整的自定义处理器。然后,您可以生成 CREATE TABLE,然后将 CSV 行转换为 INSERT 语句。如果您发现自己想要连接到数据库,请查看我的博客文章,了解如何在脚本处理器中使用 DBCP 连接池。

于 2016-10-31T14:10:12.690 回答