- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在开发一个 GCP 云函数,它将在 BigQuery 表上执行查询,将数据加载到某个临时表中,然后该数据可能会被该临时表中的其他一些云函数使用。
在我的查询中,我使用一个表,我想在云函数中执行查询之前检查该表是否存在。为此,我编写了两个 try except block ,第一个 block 将检查表是否存在。如果表尚未创建,那么它将使用提供的 create_table 查询创建该表。之后它应该执行第二个 try except block ,但在这里我收到错误。第一个 try except block 正在创建表(如果尚未创建),但之后执行第二个 try except block 失败并出现错误:
""客户端具有本地且不可pickle的非平凡状态。", _pickle.PicklingError:明确不支持pickling客户端对象。客户端具有本地且不可pickle的非平凡状态。”
到目前为止,我已经在 python 中尝试了以下代码:
def main(request):
my_client = bigquery.Client()
create_table = 'CREATE OR REPLACE TABLE {}.{} (customerName STRING, IDNumber STRING)'.format(dest_dataset, dest_table)
job_configs = bigquery.QueryJobConfig()
destination_dataset = my_client.dataset(dest_dataset, dest_project)
destination_table = destination_dataset.table(dest_table)
job_configs.destination = destination_table
# Check the final destination table is already exists, if not then create it based on create_table query.
try:
table = my_client.get_table(destination_table)
if table:
print('Table {}\'s existence sucessfully proved!'.format(destination_table))
except NotFound as error:
temporary_table = my_client.query(create_table, location='US')
temporary_table.result()
print('Table {} is created!'.format(destination_table))
# After checking destination_table existance, run actual query (destination_table being used in this query) and load data into temporary table
try:
client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
dest_dataset = client.dataset(temporary_dataset, temporary_project)
dest_table = dest_dataset.table(temporary_table)
job_config.destination = dest_table
job_config.create_disposition = 'CREATE_IF_NEEDED'
job_config.write_disposition = 'WRITE_TRUNCATE'
query_job = client.query(query, location='US', job_config=job_config)
query_job.result()
table = client.get_table(dest_table)
expiration = (datetime.now() + timedelta(minutes=expiration_time))
table.expires = expiration
table = client.update_table(table, ["expires"])
logger.info("Query result loaded into temporary table: {}".format(temporary_table))
except RuntimeError:
logger.error("Exception occurred {}".format(RuntimeError))
有什么方法可以解决此错误或有任何不同的方法来检查表是否存在
最佳答案
我找到了解决我的问题的解决方法,我想做的是,我为每个 try except block 编写 2 个单独的函数,如下所示:
def check_dest_table_existence(request):
my_client = bigquery.Client()
create_table = 'CREATE OR REPLACE TABLE {}.{} (customerName STRING, IDNumber STRING)'.format(dest_dataset, dest_table)
job_configs = bigquery.QueryJobConfig()
destination_dataset = my_client.dataset(dest_dataset, dest_project)
destination_table = destination_dataset.table(dest_table)
job_configs.destination = destination_table
# Check the final destination table is already exists, if not then create it based on create_table query.
try:
table = my_client.get_table(destination_table)
if table:
print('Table {}\'s existence sucessfully proved!'.format(destination_table))
except NotFound as error:
temporary_table = my_client.query(create_table, location='US')
temporary_table.result()
print('Table {} is created!'.format(destination_table))
def main(request):
# Check destination_table existance, run actual query (destination_table being used in this query) and load data into temporary table
try:
# Calling another function to check existence of destination table.
check_dest_table_existence(request)
client = bigquery.Client()
job_config = bigquery.QueryJobConfig()
dest_dataset = client.dataset(temporary_dataset, temporary_project)
dest_table = dest_dataset.table(temporary_table)
job_config.destination = dest_table
job_config.create_disposition = 'CREATE_IF_NEEDED'
job_config.write_disposition = 'WRITE_TRUNCATE'
query_job = client.query(query, location='US', job_config=job_config)
query_job.result()
table = client.get_table(dest_table)
expiration = (datetime.now() + timedelta(minutes=expiration_time))
table.expires = expiration
table = client.update_table(table, ["expires"])
logger.info("Query result loaded into temporary table: {}".format(temporary_table))
except RuntimeError:
logger.error("Exception occurred {}".format(RuntimeError))
关于python - 在 python 中使用 BigQuery 客户端库时出现错误 "Clients have non-trivial state that is local and unpickleable."?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59767243/
我被要求编写一个递归代码来打印一个数组。一位 friend 向我展示了这段代码: include int i=0; void print(int A[], int n) { if(i voi
我正在尝试让 google 的示例(应用内购买 version 3)测试应用“TrivialDrive”正常工作,但遇到以下问题: 我点击“buy gas”按钮,出现以下屏幕: 此消息有两种可能的解释
我知道这是一个非常常见的主题,但尽管典型的 UB 很容易找到,但到目前为止我还没有找到这个变体。 因此,我尝试正式引入 Pixel 对象,同时避免数据的实际拷贝。 这有效吗? struct Pixel
当一个函数接受一个函数参数(或者一个类有一个函数槽)时,有两种方法可供选择: def foo(..., my_func=None, ...): ... if my_func:
你知道任何 git 命令的工具/开关可以帮助我防止冲突或加速 merge 吗? 目前我经常遇到这样的“琐碎的冲突”: ++>>>>>> 587f917... 我想这是由一些空格引起的。这很容易被人类解
我在国际象棋引擎上工作了一段时间。为了改进引擎,我编写了一些代码,将国际象棋位置从内存加载到一些调谐器代码中。我的机器上大约有 1.85B fens,加起来达到 40Gb(每个位置 24B)。 加载后
我想在 Spark 中加入两个数据集。这就是我所做的: Dataset data = spark.read().format("parquet").load("hdfs://path"); Datas
我在国际象棋引擎上工作了一段时间。为了改进引擎,我编写了一些代码,将国际象棋位置从内存加载到一些调谐器代码中。我的机器上大约有 1.85B fens,加起来达到 40Gb(每个位置 24B)。 加载后
根据我对标准的理解,普通析构函数是一种隐式声明的析构函数,其类只有基本和非静态成员以及普通析构函数。鉴于此定义的递归性,在我看来,唯一的“递归停止”条件是找到具有非隐式声明的析构函数(即用户声明的)的
在 C++0x 中,我想确定一个类是否简单/是否具有标准布局,以便我可以使用 memcpy()、memset() 等... 我应该如何使用 type_traits 实现下面的代码,这样我才能确认一个类
我有一个带有“日期”列的表,我想做一个执行以下操作的查询: 如果日期是 星期一 , 周二 , 周三 , 或 星期四 , 显示的日期应该上移 1 天,如 DATEADD(day, 1, [Date])
我有一个非常复杂的项目(大约 100 个模块),我想在它上面运行 mvn dependency:tree .它失败了,提示它无法解决的依赖关系。该项目否则编译得很好。所以我创建了我能想到的最基本的项目
我希望这会返回一个 Date 对象,表示从现在开始一小时后的时间: Calendar.current.date(byAdding: DateComponents(hour: 1), to: Date(
Blocksworld显然是自动化规划中的基准领域。 This domain consists of a set of blocks, a table and a robot hand. The bl
我是 Angular 新手,我想做一些重要的输入验证。 基本上我有一张 table 。每行包含三个文本输入。当用户输入任何文本输入时,我想检查该表是否至少包含一行具有三个非空白输入字段。如果是的话
我无法理解导致索引错误的原因,而不是寻找快速修复。但是,如果我的代码让您反感/非常无效,请告诉我。目标是生成由两个四位数的乘积产生的回文。 代码: for x in range(10000):
我有一些数据需要多个 Activity 操作。基本上有一个只读屏幕和多个编辑屏幕。 起初我考虑将数据作为字符串参数传递给 Intent,但如果用户在编辑字段后按下后退按钮,这些更改将会丢失。 那么在不
我会定义“平凡可 move ” Calling the move constructor (or the move assignment operator) is equivalent to memc
我只想 class Trivial t instance Trivial t 这在 Haskell 98 中当然没用,因为你可以忽略约束;但使用 ConstraintKinds,我们可以明确要求类型为
在 future 的 C++ 标准中,我们将拥有“平凡的可重定位性”的概念,这意味着我们可以简单地将字节从一个对象复制到未初始化的内存块,并简单地忽略/清零原始对象的字节。 这样,我们就模仿了 C 风
我是一名优秀的程序员,十分优秀!