如何以编程方式重命名AWS Glue目录中的列名

时间:2018-08-01 11:00:31

标签: aws-glue

我已经使用搜寻器填充了25个表的Glue目录。现在,表名都具有通用的列名。有什么更好的方法以编程方式重命名这些列,而不是一个个地手动进行重命名?我也不想用不同的列名再次写入相同的数据。我遇到了RenameField类,但不确定是重命名目录还是再次写入整个数据?

3 个答案:

答案 0 :(得分:1)

1。

您可以使用boto3 sdk创建表,而不是运行搜寻器。 http://boto3.readthedocs.io/en/latest/reference/services/glue.html#Glue.Client.create_table gum.create_table(DatabaseName =,TableInput =) TableInput参数采用json格式,您可以在其中定义表列名称。

“列”:[                 {                     '名称':'字符串',                     '类型':'字符串',                     '注释':'字符串'                 },             ]

您可以构造'Columns'元素,编写一个python代码以读取源表(s3文件或MySQL表,或者以您的源定义为准) 拥有json后,您可以编写一个python脚本来执行create_table。

2。如果您已经使用搜寻器创建了表定义,则另一种方法是获取表的定义。

a)重命名列。 b)做#1。 c)放下桌子。

response = client.delete_table(
CatalogId='string',
DatabaseName='string',
Name='string'
                            )

d)创建表格

3。您可以在Glue代码中完成此操作,而无需更改表定义。

重命名列

for c in cust_addressDF.columns:
        cust_addressDF = cust_addressDF.withColumnRenamed(c , "cust_"+c)

这里cust_addressDF是从Glue DynamicFrame创建的spark DataFrame。这将在运行时为列添加“ cust _”。

我正在处理#1和#3。

答案 1 :(得分:0)

您要重命名目录中的Glue表列名还是重命名Glue代码中Dynamicframe中的列?

答案 2 :(得分:0)

如果您正在运行Glue ETL作业,则可以使用ApplyMapping class重命名列:

# Glue ETL script for python
applymapping1 = ApplyMapping.apply(
frame = datasource0, 
mappings = [
    ("column_1", "string", "column_1", "string"),
    ("column_2", "string", "column_2", "string"),
    ("partition_0", "string", "year", "string"), 
    ("partition_1", "string", "month", "string"), 
    ("partition_2", "string", "day", "string"), 
    ("partition_3", "string", "hour", "string")
    ], 
    transformation_ctx = "applymapping1")

在上面的示例中,分区0-3重命名为年,月,小时。