Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.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
Python 获得;禁止:403超出速率限制:此表的表更新操作太多;将CSV文件从云存储加载到大查询时_Python_Google Cloud Platform_Google Bigquery_Google Cloud Functions_Google Cloud Storage - Fatal编程技术网

Python 获得;禁止:403超出速率限制:此表的表更新操作太多;将CSV文件从云存储加载到大查询时

Python 获得;禁止:403超出速率限制:此表的表更新操作太多;将CSV文件从云存储加载到大查询时,python,google-cloud-platform,google-bigquery,google-cloud-functions,google-cloud-storage,Python,Google Cloud Platform,Google Bigquery,Google Cloud Functions,Google Cloud Storage,我正在尝试使用Python中的cloud函数将云csv文件数据加载到大查询表中。我的代码用于10行的数据,但是在将行数超过1000行之后,它抛出了下面的错误。共19列,共1000行 当有人在云存储中上载包含更新数据的csv文件时,该函数仅被调用一次。频率将非常低,即每月一次 禁止:403超出速率限制:此表的表更新操作太多 下面是代码 def hello_gcs(event, context): print('Event ID: {}'.format(context.event_id)) prin

我正在尝试使用Python中的cloud函数将云csv文件数据加载到大查询表中。我的代码用于10行的数据,但是在将行数超过1000行之后,它抛出了下面的错误。共19列,共1000行


当有人在云存储中上载包含更新数据的csv文件时,该函数仅被调用一次。频率将非常低,即每月一次

禁止:403超出速率限制:此表的表更新操作太多

下面是代码

def hello_gcs(event, context):
print('Event ID: {}'.format(context.event_id))
print('Event type: {}'.format(context.event_type))
print('Bucket: {}'.format(event['bucket']))
print('File: {}'.format(event['name']))
print('Metageneration: {}'.format(event['metageneration']))
print('Created: {}'.format(event['timeCreated']))
print('Updated: {}'.format(event['updated']))
if event['name'] == "DUMMY FLIGHT DETAIL LIST 18012021.csv":
   print('blob checking: {}'.format(event['name']))
   def inner_function():
       from google.cloud import bigquery
# Construct a BigQuery client object.
       client = bigquery.Client()
# TODO(developer): Set table_id to the ID of the table to create.
       table_id = "project-a-307309.DatasetA.TableE"
       load_job = client.delete_table(table_id, not_found_ok=True)  # Make an API request.
       print("Deleted table '{}'.".format(table_id))
       job_config = bigquery.LoadJobConfig(
          schema=[
             bigquery.SchemaField("ID", "STRING"),
             bigquery.SchemaField("STATUS", "STRING"),
             bigquery.SchemaField("PRIORITY", "STRING"),
             bigquery.SchemaField("BRAND", "STRING"),
             bigquery.SchemaField("FLIGHT_NAME", "STRING"),
             bigquery.SchemaField("FLIGHT_TYPE", "STRING"),
             bigquery.SchemaField("City", "STRING"),
             bigquery.SchemaField("Destination_Tier", "STRING"),
             bigquery.SchemaField("Country", "STRING"),
             bigquery.SchemaField("Management_Type", "STRING"),
             bigquery.SchemaField("Area", "STRING"),
             bigquery.SchemaField("Seat_Count", "STRING"),
             bigquery.SchemaField("Tier", "STRING"),
             bigquery.SchemaField("New_Segment", "STRING"),
             bigquery.SchemaField("Running_Date", "STRING"),
             bigquery.SchemaField("Expected_Opening", "STRING"),
             bigquery.SchemaField("New_Updated_Opening", "STRING"),
             bigquery.SchemaField("COMMENT", "STRING"),
             bigquery.SchemaField("URL", "STRING")
            ],
          skip_leading_rows=6,
    # The source format defaults to CSV, so the line below is optional.
        source_format=bigquery.SourceFormat.CSV,
        )
       uri = "gs://dummy_flight_details/DUMMY FLIGHT DETAIL LIST 18012021.csv"
       load_job = client.load_table_from_uri(
          uri, table_id, job_config=job_config
        )  # Make an API request.
       load_job.result()  # Waits for the job to complete.
       destination_table = client.get_table(table_id)  # Make an API request.
       print("Loaded {} rows.".format(destination_table.num_rows))
   inner_function()
   def outer_func():
    from google.cloud import storage
    import time
    ts = time.time()
    print("ts")
    print(ts)
    bucket_name = "dummy_flight_details"
    blob_name = "DUMMY FLIGHT DETAIL LIST 18012021.csv"
    new_name = "DUMMY FLIGHT DETAIL LIST 18012021.csv".format(ts)

    def rename_blob():
        print("function entered")
        storage_client = storage.Client()
        bucket = storage_client.bucket(bucket_name)
        blob = bucket.blob(blob_name)
        new_blob = bucket.rename_blob(blob, new_name)
        print("Blob {} has been renamed to {}".format(blob.name, new_blob.name))

    rename_blob()

   outer_func()
要求文本

# Function dependencies, for example:
# package>=version
google-cloud-bigquery==2.11.0
google-cloud-storage==1.35.0
日志

Traceback (most recent call last): File "/layers/google.python.pip/pip/lib/python3.8/site-packages/flask/app.py", line 2447, in wsgi_app response = self.full_dispatch_request() File "/layers/google.python.pip/pip/lib/python3.8/site-packages/flask/app.py", line 1952, in full_dispatch_request rv = self.handle_user_exception(e) File "/layers/google.python.pip/pip/lib/python3.8/site-packages/flask/app.py", line 1821, in handle_user_exception reraise(exc_type, exc_value, tb) File "/layers/google.python.pip/pip/lib/python3.8/site-packages/flask/_compat.py", line 39, in reraise raise value File "/layers/google.python.pip/pip/lib/python3.8/site-packages/flask/app.py", line 1950, in full_dispatch_request rv = self.dispatch_request() File "/layers/google.python.pip/pip/lib/python3.8/site-packages/flask/app.py", line 1936, in dispatch_request return self.view_functions[rule.endpoint](**req.view_args) File "/layers/google.python.pip/pip/lib/python3.8/site-packages/functions_framework/__init__.py", line 149, in view_func function(data, context) File "/workspace/main.py", line 52, in hello_gcs inner_function() File "/workspace/main.py", line 49, in inner_function load_job.result() # Waits for the job to complete. File "/layers/google.python.pip/pip/lib/python3.8/site-packages/google/cloud/bigquery/job/base.py", line 662, in result return super(_AsyncJob, self).result(timeout=timeout, **kwargs) File "/layers/google.python.pip/pip/lib/python3.8/site-packages/google/api_core/future/polling.py", line 134, in result raise self._exception google.api_core.exceptions.Forbidden: 403 Exceeded rate limits: too many table update operations for this table. For more information, see https://cloud.google.com/bigquery/troubleshooting-errors

您可能希望查看此页面:


并检查您的云函数被调用的次数和频率…

您可以查看此页面:


检查您的云函数被调用的次数和频率…

据我所知,您已经创建了一个无限循环。这样你就达到了通话的极限

仔细查看您的代码。首先,您说过“每次有人将文件放入存储桶时,该函数都会触发”。好的,不用担心

但是,最后你做了那件事

new_blob = bucket.rename_blob(blob, new_name)
重命名不存在,它只是旧blob到新blob的副本,以及旧blob的删除(如果旧名称与新名称不同)

因此,一个副本就是一个新blob的创建,因此GCS会触发一个新事件来运行您的函数

因为代码中有一个bug,所以新的blob名称与初始名称相同

new_name = "DUMMY FLIGHT DETAIL LIST 18012021.csv".format(ts)
字符串中缺少大括号,格式不起任何作用


传递IF的相同名称、在循环中创建的相同文件名(“重命名”),以及在循环中触发的事件


与文件大小/行数无关。

据我所知,您创建了一个无限循环。这样你就达到了通话的极限

仔细查看您的代码。首先,您说过“每次有人将文件放入存储桶时,该函数都会触发”。好的,不用担心

但是,最后你做了那件事

new_blob = bucket.rename_blob(blob, new_name)
重命名不存在,它只是旧blob到新blob的副本,以及旧blob的删除(如果旧名称与新名称不同)

因此,一个副本就是一个新blob的创建,因此GCS会触发一个新事件来运行您的函数

因为代码中有一个bug,所以新的blob名称与初始名称相同

new_name = "DUMMY FLIGHT DETAIL LIST 18012021.csv".format(ts)
字符串中缺少大括号,格式不起任何作用


传递IF的相同名称、在循环中创建的相同文件名(“重命名”),以及在循环中触发的事件


与文件大小/行数无关。

只有当有人在云存储中上载带有更新数据的csv文件时,才会调用该函数。频率将非常低,即每月调用一次。只有当有人在云存储中上载带有更新数据的csv文件时,才会调用该函数。频率将非常低,即每月一次。我相信@guillaume有正确的答案。要确认这一点,请查看BigQuery日志以查看创建了哪些作业。我相信@guillaume的答案是正确的。要确认,请查看BigQuery日志以查看创建了哪些作业。反馈非常好。BigQuery是否在云日志中记录详细信息以帮助检测此类问题?在BigQuery中,您应该能够看到触发的许多作业。但我认为这更容易在云函数中检测到,而云函数实际上就是无限循环发生的地方。@Guillaume,是的,它与配额无关。代码在添加了{}即“虚拟飞行详细信息列表18012021.csv.{}”格式(ts)后工作。反馈非常好。BigQuery是否在云日志中记录详细信息以帮助检测此类问题?在BigQuery中,您应该能够看到触发的许多作业。但我认为这更容易在云函数中检测到,而云函数实际上就是无限循环发生的地方。@Guillaume,是的,它与配额无关。代码在添加{}即“虚拟飞行详细信息列表18012021.csv.{}”格式(ts)后生效。