Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Google BigQuery API获取Clojure中非美国位置运行作业的状态_Clojure_Google Bigquery - Fatal编程技术网

Google BigQuery API获取Clojure中非美国位置运行作业的状态

Google BigQuery API获取Clojure中非美国位置运行作业的状态,clojure,google-bigquery,Clojure,Google Bigquery,我有一个应用程序,可以读取CSV文件并将其推送到BQ表,在执行下一个CSV文件之前检查该作业的状态,等等。当我的数据集在美国地区时,它工作得很好,但是我们最近将数据集移到了澳大利亚地区,现在我得到了 #错误{:原因404未找到{“代码”:404,“错误”:[{“域”:“全局”,“消息”:“未找到:作业加载-csv-job123”,“原因”:“未找到”} 虽然我可以针对此数据集运行作业,但我无法在Clojure代码中调用BQ get API来获取状态。在调用insert作业API时,我正在jobR

我有一个应用程序,可以读取CSV文件并将其推送到BQ表,在执行下一个CSV文件之前检查该作业的状态,等等。当我的数据集在美国地区时,它工作得很好,但是我们最近将数据集移到了澳大利亚地区,现在我得到了

#错误{:原因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中的一些东西来实现这一点。