Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.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
PostgreSQL RDS中JSONB列的AWS胶水爬虫程序_Json_Postgresql_Amazon Web Services_Amazon S3_Aws Glue - Fatal编程技术网

PostgreSQL RDS中JSONB列的AWS胶水爬虫程序

PostgreSQL RDS中JSONB列的AWS胶水爬虫程序,json,postgresql,amazon-web-services,amazon-s3,aws-glue,Json,Postgresql,Amazon Web Services,Amazon S3,Aws Glue,我创建了一个爬虫程序,它查看带有JSONB列的PostgreSQL 9.6 RDS表,但爬虫程序将列类型标识为“string”。然后,当我尝试创建一个将数据从S3上的JSON文件加载到RDS表的作业时,我得到一个错误 如何将JSON文件源映射到JSONB目标列?这不是一个完全直接的复制,但一种对我有效的方法是将目标表上的列定义为文本。粘合作业填充字段后,我将其转换为JSONB。例如: alter table postgres_table alter column column_with_jso

我创建了一个爬虫程序,它查看带有JSONB列的PostgreSQL 9.6 RDS表,但爬虫程序将列类型标识为“string”。然后,当我尝试创建一个将数据从S3上的JSON文件加载到RDS表的作业时,我得到一个错误


如何将JSON文件源映射到JSONB目标列?

这不是一个完全直接的复制,但一种对我有效的方法是将目标表上的列定义为文本。粘合作业填充字段后,我将其转换为JSONB。例如:

alter table postgres_table
 alter column column_with_json set data type jsonb using column_with_json::jsonb;

请注意对现有文本数据使用强制转换。否则,alter列将失败。

爬虫程序将JSONB列类型标识为“string”,但您可以尝试在Glue中使用Unbox类将此列转换为json

让我们在PostgreSQL中检查下表

create table persons (id integer, person_data jsonb, creation_date timestamp )
有一个来自person表的记录示例

ID = 1
PERSON_DATA = {
               "firstName": "Sergii",
               "age": 99,
               "email":"Test@test.com"
               }
CREATION_DATE = 2021-04-15 00:18:06
需要在Glue中添加以下代码

# 1. create dynamic frame from catalog 
df_persons = glueContext.create_dynamic_frame.from_catalog(database = "testdb", table_name = "persons", transformation_ctx = "df_persons ")
# 2.in path you need to add your jsonb column name that need to be converted to json
df_persons_json = Unbox.apply(frame = df_persons , path = "person_data", format="json")
# 3. converting from dynamic frame to data frame 
datf_persons_json = df_persons_json.toDF()

# 4. after that you can process this column as a json datatype or create dataframe with all necessary columns , each json data element can be added as a separate column in dataframe : 
final_df_person = datf_persons_json.select("id","person_data.age","person_data.firstName","creation_date")
您还可以检查以下链接:


爬虫程序创建一个包含列和类型的表目录,您可以在爬虫程序运行后进行编辑。您可以登录到glue控制台并尝试将该列的类型更改为JSONB吗?