簡體   English   中英

AWS Glue - 在插入之前截斷目標 postgres 表

[英]AWS Glue - Truncate destination postgres table prior to insert

我試圖在插入之前截斷一個 postgres 目標表,一般來說,我試圖利用已經在 GLUE 中創建的連接來觸發外部函數。

有沒有人能夠這樣做?

我已經嘗試過DROP/ TRUNCATE場景,但無法使用已經在 Glue 中創建的連接,而是使用純 Python PostgreSQL 驅動程序pg8000 來實現

  1. 從 pypi 下載 pg8000的 tar
  2. 在根文件夾中創建一個空的__init__.py
  3. 壓縮內容並上傳到 S3
  4. 引用作業的Python lib path中的 zip 文件
  5. 將數據庫連接詳細信息設置為作業參數(確保在所有鍵名前加上-- )。 勾選“服務器端加密”框。

然后您可以簡單地創建一個連接並執行 SQL。

import sys
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.dynamicframe import DynamicFrame
from awsglue.job import Job

import pg8000

args = getResolvedOptions(sys.argv, [
    'JOB_NAME',
    'PW',
    'HOST',
    'USER',
    'DB'
])
# ...
# Create Spark & Glue context

job = Job(glueContext)
job.init(args['JOB_NAME'], args)

# ...
config_port = 5432
conn = pg8000.connect(
    database=args['DB'], 
    user=args['USER'], 
    password=args['PW'],
    host=args['HOST'],
    port=config_port
)
query = "TRUNCATE TABLE {0};".format(".".join([schema, table]))
cur = conn.cursor()
cur.execute(query)
conn.commit()
cur.close()
conn.close()

在遵循@thenaturalist 回復的步驟(4)之后,

sc.addPyFile("/home/glue/downloads/python/pg8000.zip")

import pg8000

在開發端點為我工作(zeppelin notebook)

更多信息: https ://docs.aws.amazon.com/glue/latest/dg/aws-glue-programming-python-libraries.html

為了澄清@thenaturalist zip 的說明,因為我仍然在努力解決這個問題


pypi.org下載pg8000的 tar.gz 並解壓。
壓縮內容,以便您具有以下結構

pg8000-1.15.3.zip
|
| -- pg8000 <dir>
    | -- __init__.py
    | -- _version.py <optional>
    | -- core.py

上傳到 s3 然后你應該可以做一個簡單的import pg8000

注意:此時還需要廢棄,因此請按照與上述相同的程序來包含廢棄模塊。 但是你不需要導入它。


data=spark.sql(sql)
conf = glueContext.extract_jdbc_conf("jdbc-commerce")
data.write \
    .mode('overwrite') \
    .format("jdbc") \
    .option("url", conf['url']) \
    .option("database", 'Pacvue_Commerce') \
    .option("dbtable", "dbo.glue_1") \
    .option("user", conf['user']) \
    .option('truncate','true') \
    .option("password", conf['password']) \
    .save()

膠水 api 不支持,但 spark api 支持。

jdbc-commerce 是您在爬網時的連接名稱。 使用extract_jdbc_conf獲取url、用戶名和密碼。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM