gpt4 book ai didi

mysql - NiFi 中的命名约定

转载 作者:行者123 更新时间:2023-11-29 06:37:37 27 4
gpt4 key购买 nike

我有一个流程GetFile->ConvertRecord->splittext->PutdatabaseRecord。我发送到 GetFile 的 csv 文件包含以下字段:

ID  TIME                      M00B01  M00B02  M00B03
1 2018-09-27 10:44:23.972 3242 35 335
2 2018-09-21 11:44:23.972 323 24 978

MYSQL中我的数据库表骨架如下:

Create table test(ID INT,TIME DATETIME(3),MxB01 INT,MxB02 INT,MxB03 INT);

注意:我已将 header 名称替换为 MxB00、MxB01 等。

当我以 CSVReader 方式读取并以 CSVSetWritter 方式写入时,我的 ConvertRecord 处理器出现错误。我附上两者的配置供您引用。

问题是它读取 CSV 文件,但由于 header 名称发生更改,它会将所有其他字段显示为空白(我更改了 header 名称,因为我必须将 header 名称写为 MxB00 以便匹配 MySQL 中定义的 header table )。我获得了 ID 和 Time 的值,因为我没有更改 CSVWritter 和 MySQL 表定义中这些字段的 header 名称。所以我得到了这些值,但对于其他值,我得到了空白,因为它由于名称更改而变得困惑。

CSVReader

CSVSetWritter

AvroSchemaRegistry

如何解决这个问题?非常感谢任何帮助。谢谢!

最佳答案

当您想要为输出 CSV 文件创建自定义 header 时,请配置 CSV 阅读器 Controller 服务,如下所示。

配置: enter image description here

因为我们使用架构访问策略作为架构文本,并将架构指定为

{
"type": "record",
"name": "SQLSchema",
"fields" : [
{"name": "ID", "type": ["null","int"]},
{"name": "TIME", "type": ["null","string"]},
{"name": "MxB01", "type": ["null","int"]},
{"name": "MxB02", "type": ["null","int"]},
{"name": "MxB03", "type": ["null","int"]}
]
}

我们将 csv 数据的第一行视为标题忽略 CSV 标题列名称,因此输出流文件将具有我们上面定义的架构。 p>

CsvWriter 配置:

enter image description here由于我们继承了模式写入策略,因此输出流文件将具有与我们在阅读器中指定的相同的 header 。

此外我不确定为什么您在 ConvertRecord 之后使用 SplitText 处理器作为 PutDatabaseRecord 处理器,旨在一次处理记录 block 。

即使您可以使用上面提到的 CsvReader Controller 服务配置 PutDatabaseRecord 处理器,那么您的流程将是:

流程:

GetFile -> PutDatabaseRecord

注意:

因为我没有使用 Avro 逻辑类型作为时间戳字段,如果您使用逻辑类型,则相应地更改 Controller 服务配置。

关于mysql - NiFi 中的命名约定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53126610/

27 4 0
文章推荐: mysql - 查询 sql 以与 python 一起使用
文章推荐: php - Codeigniter:如何在 3 个表之间进行 desc 排序?
文章推荐: PHP/mySQL Insert 然后调用存储过程获取id
文章推荐: php - 如何在 php 中从数据库中设置选定的值标记