读取文本文件JSON数据以在Cloud Pub Sub中发布消息

问题描述 投票:0回答:2

我正在尝试将数据发布到Cloud Pub Sub。数据采用JSON格式,并保存在本地文件夹中。我没有使用云存储并试图通过云功能直接读取pubsub消息。通过手动传递消息来测试流,并且数据也会插入到Bigquery表中。只有我被卡住的地方是,我将如何将.txt文件JSON数据集传递给Cloud PubSub,

样本数据

{"ID":6,"NAME":"Komal","AGE":22,"ADDRESS":"Assam","SALARY":20000}

任何人都可以给我一个暗示!

我可以看到使用云存储的所有选项,所有这些,我在这里读取数据库表中已更改的数据,将这些记录插入到1个虚拟表中,并将该表中的数据转换为JSON格式并写入.txt文件。从这里,如果我可以将数据发布到pubsub,整个流程将完成

如果我手动传递如下,数据将被插入

gcloud pubsub主题发布pubsubtopic1 --message

{"ID":6,"NAME":"Komal","AGE":22,"ADDRESS":"Assam","SALARY":20000}

Edit on APRIL 10th

一些我如何使用批处理文件实现从.txt文件到pubsub的数据插入。但是当我从PL SQL过程(DBMS_SCHEDULER)调用批处理文件时,它抛出错误“'gcloud'不被识别为内部或外部命令”。但是当我从命令行调用批处理文件时,数据也会被发送到pub sub和Bigquery表。我正在使用的TFF脚本和PL SQL代码也是如此。任何帮助将非常感激

Batch script & PL SQL code used to call the script

@echo off
set file=C:\temp\TEST_EXTRACT.txt
echo %file% >> C:\temp\T1.txt
for /f "tokens=*" %%A in (%file%) do (ECHO %%A >> C:\temp\T2.txt
ECHO cmd.exe /K cd C:\Users\test\AppData\Local\Google\Cloud SDK && gcloud pubsub topics publish pubsubtopic1 --message %%A > C:\temp\T3.txt)

Below mentioned the PL SQL code which is used for calling the batch file

BEGIN
SYS.DBMS_SCHEDULER.CREATE_JOB( 
    job_name => 'LOOP_JOB',
    job_type => 'EXECUTABLE',
    job_action => 'C:\WINDOWS\system32\cmd.exe',
    --repeat_interval => 'FREQ=WEEKLY;BYDAY=MON,TUE,WED,THU,FRI;  BYHOUR=18;BYMINUTE=0;BYSECOND=0',
    --start_date => SYSTIMESTAMP at time zone 'EUROPE/LONDON',
    job_class => 'DEFAULT_JOB_CLASS',
    comments => 'Job to test call out to batch script on Windows',
    auto_drop => FALSE,
    number_of_arguments => 3,
    enabled => FALSE);

SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 
    job_name => 'LOOP_JOB', argument_position => 1, argument_value => '/q'); 
SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 
    job_name => 'LOOP_JOB', argument_position => 2, argument_value => '/c'); 
SYS.DBMS_SCHEDULER.SET_JOB_ARGUMENT_VALUE( 
    job_name => 'LOOP_JOB', argument_position => 3, argument_value => 'C:\temp\loop.bat'); 
SYS.DBMS_SCHEDULER.ENABLE( 'LOOP_JOB' ); 
END;
/
text-files google-cloud-pubsub
2个回答
2
投票

bash脚本的问题很可能是gcloud命令行工具没有安装在数据库实际运行的机器上,或者不在运行脚本的环境的PATH中,所以当你的.bat脚本是跑。

话虽这么说,我强烈建议不要尝试在.bat脚本中进行数据处理并将其传递给命令行工具,因为它会非常容易出错,并且通过低效的JSON编码会产生很大的开销,以及为每条消息提出并拆除发布者客户端。相反,我建议您考虑以CSV格式导出数据,并使用其中一个client libraries来读取此文件并发布到Cloud Pub / Sub。如下所述,仍然可以从数据库cron作业触发,并且效率更高,更可测试。


0
投票

如果您在文件中获得的Json数据是一个数组,那么您可以使用以下命令将该数组的每个条目发布到该主题:

jq -c ".[]" json_array.json | xargs -t -I {} gcloud pubsub topics publish yourTopic --message {}

确保你安装了jq,而xargs更常见。

© www.soinside.com 2019 - 2024. All rights reserved.