При использовании Relationalize в Glue в корневой таблице нет идентификатора.

У меня есть DynamicFrame в Glue, и я использую метод Relationalize, который создает 3 новых динамических кадра; root_table, root_table_1 и root_table_2.

Когда я печатаю схему таблиц или после того, как я вставил таблицы в базу данных, я заметил, что в root_table отсутствует идентификатор, поэтому я не могу выполнять соединения между root_table и другими таблицами.

Я перепробовал все возможные комбинации.

Я что-то упустил?

    datasource1 = Relationalize.apply(frame = renameId, name = "root_ds", transformation_ctx = "datasource1")
print(datasource1.keys())
print(datasource1.values())
for df_name in datasource1.keys():
    m_df = datasource1.select(df_name)
    print "Writing to Redshift table: ", df_name
    m_df.printSchema()

    glueContext.write_dynamic_frame.from_jdbc_conf(frame = m_df, catalog_connection = "Redshift", connection_options = {"database" : "redshift", "dbtable" : df_name}, redshift_tmp_dir = args["TempDir"], transformation_ctx = "df_to_db")

person Tose Nastev    schedule 27.09.2018    source источник
comment
не могли бы вы вставить пример данных и весь код здесь?   -  person Tanveer Uddin    schedule 28.09.2018
comment
Я вставляю данные как ответ   -  person Tose Nastev    schedule 08.10.2018


Ответы (1)


Я использовал приведенный ниже код (удалив биты импорта) для ваших данных и записал их в S3. Я получил два файла, вставленных после кода. Я читаю из каталога клея после запуска сканера на ваших данных.

datasource0 = glueContext.create_dynamic_frame.from_catalog(database = "sampledb", table_name = "json_aws_glue_relationalize_stackoverflow", transformation_ctx = "datasource0")

dfc = datasource0.relationalize("advertise_root", "s3://aws-glue-temporary-009551040880-ap-southeast-2/")

for df_name in dfc.keys():
    m_df = dfc.select(df_name)
    print "Writing to S3 file: ", df_name
    datasink2 = glueContext.write_dynamic_frame.from_options(frame = m_df, connection_type = "s3", connection_options = {"path": "s3://aws-glue-relationalize-stackoverflow/" + df_name +"/"}, format = "csv", transformation_ctx = "datasink2")

job.commit()

главная таблица adserCountry,advertiserId,amendReason,исправлено,clickDate,clickDevice,clickRefs.clickRef2,clickRefs.clickRef6,commissionAmount.amount,"commissionAmount.currency","commissionSharingPublisherId",commissionStatus,customParameters,customerCountry,declineReason,id,ipHash,lapseTime, oldCommissionAmount,oldSaleAmount,orderRef,originalSaleAmount,paidToPublisher,paymentId,publisherId,publisherUrl,saleAmount.amount,saleAmount.currency,siteName,transactionDate,transactionDevice,transactionParts,transactionQueryId,type,url,validationDate,voucherCode,voucherCodeUsed,partition_0 AT,123456,, false,2018-09-05T16:31:00,iPhone,"asdsdedrfrgthyjukiloujhrdf45654565423212",www.website.at,1.5,EUR,,в ожидании,,AT,,321547896,-27670654789123380,68,,,,,false,0, 654987,,1.0,EUR,https://www.site.at,2018-09-05T16:32:00,iPhone,1,0,Lead,https://www.website.at ,,,ложь,реклама

Другая таблица для идентификаторов частей транзакции, индекса, «transactionParts.val.amount», «transactionParts.val.commissionAmount», «transactionParts.val.commissionGroupCode», «transactionParts.val.commissionGroupId», «transactionParts.val.commissionGroupName» 1, 0,1.0,1.5,ВЕДЕНИЕ,654654,Ведение

Приклейте сгенерированный столбец первичного ключа с именем «transactionParts» в базовой таблице, а идентификатор в таблице transactionparts является внешним ключом для этого столбца. Как видите, исходный столбец id сохранился как есть.

Не могли бы вы попробовать код на своих данных и посмотреть, работает ли он (изменив имя исходной таблицы на ваше)? Попробуйте сначала написать на S3 как CSV, чтобы выяснить, работает ли это. Пожалуйста, дайте мне знать ваши выводы.

person Tanveer Uddin    schedule 08.10.2018
comment
Я не знаю, как я это пропустил. я ожидал идентификатор имени столбца и только идентификатор и даже не видел в других столбцах. В документации говорится, что столбец должен быть идентификатором, и я просто следил за ним. Большое спасибо. - person Tose Nastev; 09.10.2018