AWSGlue爬虫在读取空文件时会创建多个表
创始人
2024-09-25 16:02:08
0

可以使用以下代码示例来解决此问题:

import json
import boto3

def lambda_handler(event, context):
    glue = boto3.client('glue')
    
    # 获取所有数据库
    databases = glue.get_databases()
    for database in databases['DatabaseList']:
        
        # 获取每个数据库中的所有表
        tables = glue.get_tables(DatabaseName=database['Name'])
        for table in tables['TableList']:
            
            # 判断表是否为空
            partition_keys = table.get('PartitionKeys')
            if partition_keys and len(partition_keys) == 1 and partition_keys[0]['Name'] == 'year':
                
                # 获取表路径并删除表
                table_uri = table['StorageDescriptor']['Location']
                glue.delete_table(DatabaseName=database['Name'], Name=table['Name'])
                
                # 重新创建空表
                empty_table = {
                    "Name": table['Name'],
                    "StorageDescriptor": {
                        "Columns": [
                            {
                                "Name": "Col1",
                                "Type": "string",
                                "Comment": ""
                            }
                        ],
                        "Location": table_uri,
                        "InputFormat": "org.apache.hadoop.mapred.TextInputFormat",
                        "OutputFormat": "org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat",
                        "Compressed": False,
                        "NumberOfBuckets": -1,
                        "SerdeInfo": {
                            "SerializationLibrary": "org.apache.hadoop.hive.serde2.lazy.LazySimpleSerDe",
                            "Parameters": {
                                "serialization.format": "1"
                            }
                        }
                    },
                    "PartitionKeys": [
                        {
                            "Name": "year",
                            "Type": "string"
                        }
                    ],
                    "TableType": "EXTERNAL_TABLE",
                    "Parameters": {
                        "classification": "parquet",
                        "transient_lastDdlTime": str(int(time.time()))
                    }
                }
                
                # 创建新的空表
                glue.create_table(
                    DatabaseName=database['Name'],
                    TableInput=empty_table
                )

这段代码使用AWS Lambda和AWS Glue API来检查所有数据库中的所有表,并删除为空的表。然后,它重新创建空表,该表只包含一个列“Col1”。这可以防止AWS Glue爬虫在读取空文件时创建多个表。

相关内容

热门资讯

iwatch怎么连接安卓系统,... 你有没有想过,那款时尚又实用的iWatch,竟然只能和iPhone好上好?别急,今天就来给你揭秘,怎...
安卓系统怎么连不上carlif... 安卓系统无法连接CarLife的原因及解决方法随着智能手机的普及,CarLife这一车载互联功能为驾...
iphone系统与安卓系统更新... 最近是不是你也遇到了这样的烦恼?手机更新系统总是失败,急得你团团转。别急,今天就来给你揭秘为什么iP...
oppo手机安卓系统换成苹果系... OPPO手机安卓系统换成苹果系统:现实吗?如何操作?随着智能手机市场的不断发展,用户对于手机系统的需...
安卓平板改windows 系统... 你有没有想过,你的安卓平板电脑是不是也能变身成Windows系统的超级英雄呢?想象在同一个设备上,你...
安卓系统上滑按键,便捷生活与高... 你有没有发现,现在手机屏幕越来越大,操作起来却越来越方便了呢?这都得归功于安卓系统上的那些神奇的上滑...
安卓系统连接耳机模式,蓝牙、有... 亲爱的手机控们,你们有没有遇到过这种情况:手机突然变成了“耳机模式”,明明耳机没插,声音却只从耳机孔...
安卓换鸿蒙系统会卡吗,体验流畅... 最近手机圈可是热闹非凡呢!不少安卓用户都在议论纷纷,说鸿蒙系统要来啦!那么,安卓手机换上鸿蒙系统后,...
希沃系统怎么装安卓系统,解锁更... 亲爱的读者们,你是否也像我一样,对希沃一体机上的安卓系统充满了好奇呢?想象在教室里,你的希沃一体机不...
安装了Anaconda之后找不... 在安装Anaconda后,如果找不到Jupyter Notebook,可以尝试以下解决方法:检查环境...