利用Python遍历odps元数据信息

bm:表名

fq:分区

cjsj:分区创建时间

smzq:生命周期

dx:分区大小

from odps import ODPS
odps = ODPS('xxxxxxxxx', 'xxxxxxxxxxxx', 'dyx',
            endpoint='http://xxxxxxxxx.odps.ops.yun.ga/api')
odps1 = ODPS('xxxxxxxxxxxx', 'xxxxxxxxxxxxxx', 'dwd__dev',
            endpoint='http://xxxxxxxxx1.odps.ops.yun.ga/api')            
import json
project = odps.get_project()
print(project)
#获取需要执行的表
sql='''select replace(trim(mbbm),'dwd__dev.','')mbbm from t_julong_bzc_sjgxzq where xh >=60 and xh<70 and facjsj<>''  '''
#读出表结果数据
with odps1.execute_sql(sql).open_reader() as reader:
    for record in reader:
        try:            
            name=record.mbbm            
#遍历出元数据信息        
            for table in odps.list_tables():                
#判断自定义表数据存在于元数据里面
                if name == table.name:            
                #print(name)
                #print (table.name)
#判断表是否分区
                    if table.schema.partitions:                        
                        a=list=[]                                                           
#遍历元数据的 partitions信息
                        for partition in table.partitions:                                                        
                            fq=str(partition.name)
                            name=str(project.name+'.'+table.name)
                            sj=str(partition.creation_time)
                            dx=str(partition.size)
                            smzq=str(partition.lifecycle)
                            list.append('('+name)
                            list.append(fq) 
                            list.append(sj) 
                            list.append(smzq)
                            list.append(dx+')')                                                                                                                        
                      #  return list
                            continue
                        sql='''insert into t_jl_sjtz_gxqk PARTITION(xmkj='dwd__dev')(bm,fq,cjsj,smzq,dx) values %s '''%str(str(str(str(a).replace('[\'(','(\'') ).replace(')\']','\')')).replace('\'(','(\'')).replace(')\'','\')')
                        print (sql)
                        odps1.execute_sql(sql)
        except Exception as e:
		print(e)                
                    #print str(str(str(str(a).replace('[\'(','(\'') ).replace(')\']','\')')).replace('\'(','(\'')).replace(')\'','\')')
                    #sql1='''select array(%s) '''%(str(a).replace("]",""))
                    #print(sql1)
                    #s=a.list.repalce('[','')
                    #print  (a)

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用阿里云ODPS Java SDK API获取元数据实例,您可以遵循以下步骤: 1. 创建ODPS对象并设置accessId和accessKey: ```java import com.aliyun.odps.Odps; import com.aliyun.odps.OdpsException; import com.aliyun.odps.account.Account; import com.aliyun.odps.account.AliyunAccount; Account account = new AliyunAccount("<access_id>", "<access_key>"); Odps odps = new Odps(account); odps.setEndpoint("<odps_endpoint_url>"); ``` 2. 创建Table对象并获取表的元数据信息: ```java import com.aliyun.odps.Table; import com.aliyun.odps.TableSchema; import com.aliyun.odps.columns.Column; import com.aliyun.odps.columns.ColumnType; Table table = odps.tables().get("<project_name>", "<table_name>"); TableSchema schema = table.getSchema(); // 获取表的列信息 for (Column col : schema.getColumns()) { System.out.println("列名: " + col.getName() + " 类型: " + col.getType().toString()); } // 获取表的分区信息 if (table.getPartitionColumns().size() > 0) { System.out.println("分区列名: " + table.getPartitionColumns().get(0).getName()); } ``` 3. 创建Partition对象并获取分区的元数据信息: ```java import com.aliyun.odps.Partition; import com.aliyun.odps.PartitionSpec; PartitionSpec spec = new PartitionSpec(); spec.set("pt", "20220101"); Partition partition = odps.partitions().get("<project_name>", "<table_name>", spec); TableSchema schema = partition.getSchema(); // 获取分区的列信息 for (Column col : schema.getColumns()) { System.out.println("列名: " + col.getName() + " 类型: " + col.getType().toString()); } ``` 4. 创建Function对象并获取函数的元数据信息: ```java import com.aliyun.odps.Function; Function function = odps.functions().get("<project_name>", "<function_name>"); String className = function.getClassName(); String resources = function.getResources(); ``` 5. 创建Resource对象并获取资源的元数据信息: ```java import com.aliyun.odps.Resource; Resource resource = odps.resources().get("<project_name>", "<resource_name>"); String resourceName = resource.getName(); String comment = resource.getComment(); ``` 这些步骤将帮助您使用ODPS Java SDK API获取元数据的具体实例。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值