Google BigQuery API获取Clojure中非美国位置运行作业的状态
我有一个应用程序,可以读取CSV文件并将其推送到BQ表,在执行下一个CSV文件之前检查该作业的状态,等等。当我的数据集在美国地区时,它工作得很好,但是我们最近将数据集移到了澳大利亚地区,现在我得到了Google BigQuery API获取Clojure中非美国位置运行作业的状态,clojure,google-bigquery,Clojure,Google Bigquery,我有一个应用程序,可以读取CSV文件并将其推送到BQ表,在执行下一个CSV文件之前检查该作业的状态,等等。当我的数据集在美国地区时,它工作得很好,但是我们最近将数据集移到了澳大利亚地区,现在我得到了 #错误{:原因404未找到{“代码”:404,“错误”:[{“域”:“全局”,“消息”:“未找到:作业加载-csv-job123”,“原因”:“未找到”} 虽然我可以针对此数据集运行作业,但我无法在Clojure代码中调用BQ get API来获取状态。在调用insert作业API时,我正在jobR
#错误{:原因404未找到{“代码”:404,“错误”:[{“域”:“全局”,“消息”:“未找到:作业加载-csv-job123”,“原因”:“未找到”}
虽然我可以针对此数据集运行作业,但我无法在Clojure代码中调用BQ get API来获取状态。在调用insert作业API时,我正在jobReference中设置位置
job reference(doto(JobReference.)(.setLocation“australia-southers1”)(.setJobId作业id))
然后像这样调用我的插入
status (->> bq
(.jobs)
(#(.insert % project-id job-spec content))
(.execute)
(.getStatus))]
当我执行(>>status(.getState)
我知道我必须为非美国/非欧盟地区在工作中的GET调用设置位置,但就是不知道如何使用GET API从Google文档中获取
我在下面的代码中使用的API/jar
[com.google.api/google-api-services-bigquery“v2-rev459-1.25.0”]
我使用recur获取循环中状态的代码
(loop [status status] ;; Waiting until successfully processed
(log/info job-id " : " (->> status (.getState)))
(if (= "DONE" (->> status (.getState)))
(do (log/info "Status seems done?")
(if-let [errors (.getErrors status)]
(do
(log/info "seems like we have errors")
(vec (map #(.getMessage %) errors)))
nil))
(do
(log/info "status is pending let's wait and check...job spec" job-spec)
(Thread/sleep 3000)
(recur (->> bq
(.jobs)
(#(.get % project-id job-id))
(.execute)
(.getStatus))
))))))
你能告诉我遗漏了什么吗?我试图在.get上设置位置
(#(.get%project id job id))(.setLocation“australia-Southasth1”)
带着
CompilerException java.lang.IllegalArgumentException: No matching field found: setLocation for class java.lang.String, compiling:```
这里缺少的是关于您使用的clojure库的详细信息。这不是第一方库支持的语言,因此这可能要归结到库的组装方式以及是否维护
对于jobs-get调用,需要为请求添加一个
location
URL参数以正确路由,例如gethttps://bigquery.googleapis.com/bigquery/v2/projects/yourprojectid/jobs/yourjobid?location=australia-东南1
我设法找出了如何设置位置的Clojure代码n当数据集从一个区域移动到另一个区域时,需要获取已运行作业的状态。请注意,在我的情况下,我必须确保上一个BQ作业(插入表中)在运行下一个之前已完成。我循环查看状态并重复该状态,直到完成为止。请注意,此处完成并不意味着作业成功,只意味着作业已完成。这就是为什么如果存在任何错误,我会获取下面的err vec并返回该错误
最初我使用的是线程化表单->
,但不知道如何以这种方式设置位置,所以现在使用的是普通表单。稍后我将使用线程化表单进行更新
(loop [status status] ;; Waiting until successfully processed
(log/info job-id " : " (->> status (.getState)))
(if (= "DONE" (->> status (.getState)))
(do (if-let [errors (.getErrors status)]
(do
(log/debug "Errors in job: " job-id)
(vec (map #(.getMessage %) errors)))
nil))
(do
(Thread/sleep 3000)
(recur
(let [jobsobj (.jobs bq)
getobj (.get jobsobj project-id job-id)
_ (.setLocation getobj "australia-southeast1")
]
(.getStatus (.execute getobj)))
))))
是的,我正在使用[com.google.api/google-api-services-bigquery“v2-rev459-1.25.0”]api/库。我正在寻找可以帮助我设置->>调用.Get的位置的代码。我不知道它在clojure中是如何体现的,但在java中是
setLocation()
关于jobs get call:Thx的指针,是的,我发现API文档需要Clojure中的一些东西来实现这一点。