pyspark - 使用 pyspark 从数据块中删除红移表
问题描述
我尝试连接到一个名为 stv_sessions 的红移系统表,我可以将数据读入数据帧。
此 stv_sessions 表是一个 redshift 系统表,其中包含当前正在运行的所有查询的进程 ID。
要从运行中删除查询,我们可以这样做。
select pg_terminate_backend(pid)
如果我直接连接到 redshift(使用 aginity),这对我有用,但在尝试从数据块运行时,它会给我带来不足的特权问题。
简而言之,我不知道如何从 databricks 笔记本运行查询。
到目前为止我已经尝试过了,
kill_query = "select pg_terminate_backend('12345')"
some_random_df_i_created.write.format("com.databricks.spark.redshift").option("url",redshift_url).option("dbtable","stv_sessions").option("tempdir", temp_dir_loc).option("forward_spark_s3_credentials", True).options("preactions", kill_query).mode("append").save()
请让我知道我遵循的方法是否正确。
谢谢
解决方案
Databricks 故意不预包含此驱动程序。您需要下载并安装适用于 databricks 的官方 Redshift JDBC 驱动程序。:下载官方 Amazon Redshift JDBC 驱动程序,将其上传到 Databricks,并将库附加到您的集群。(建议使用 v1.2.12 或更低版本的 Databricks 集群)。然后,使用表单的 JDBC URL
val jdbcUsername = "REPLACE_WITH_YOUR_USER"
val jdbcPassword = "REPLACE_WITH_YOUR_PASSWORD"
val jdbcHostname = "REPLACE_WITH_YOUR_REDSHIFT_HOST"
val jdbcPort = 5439
val jdbcDatabase = "REPLACE_WITH_DATABASE"
val jdbcUrl = s"jdbc:redshift://${jdbcHostname}:${jdbcPort}/${jdbcDatabase}?user=${jdbcUsername}&password=${jdbcPassword}"
jdbcUsername: String = REPLACE_WITH_YOUR_USER
jdbcPassword: String = REPLACE_WITH_YOUR_PASSWORD
jdbcHostname: String = REPLACE_WITH_YOUR_REDSHIFT_HOST
jdbcPort: Int = 5439
jdbcDatabase: String = REPLACE_WITH_DATABASE
jdbcUrl: String = jdbc:redshift://REPLACE_WITH_YOUR_REDSHIFT_HOST:5439/REPLACE_WITH_DATABASE?user=REPLACE_WITH_YOUR_USER&password=REPLACE_WITH_YOUR_PASSWORD
然后尝试将 jdbcUrl 代替您的 redshift_url。这可能是您遇到特权问题的唯一原因。
链接1:https://docs.databricks.com/_static/notebooks/redshift.html 链接2:https : //docs.databricks.com/data/data-sources/aws/amazon-redshift.html#installation
另一个原因可能是 redshift-databricks 连接器仅使用 SSL(飞行中加密),并且可能已在您的 redshift 集群上设置了 IAM 角色以仅允许某些用户删除表。
如果这些都对您的情况没有帮助,我们深表歉意。
推荐阅读
- symfony - 参数转换器(路由)将可选变量设置为某个应该为空的值
- javascript - 如何在不改变变量的情况下多次将变量推送到数组中?
- r - 在R中将二进制列聚合为具有不同级别的一列
- recursion - 在 Dr. Racket 中,如果列表中的每个整数都是偶数,我将如何编写一个生成 true 的球拍函数,否则为 false?
- bash - 如何在符号的第一次出现和第二次出现之间替换特定行中的文本
- java - 为本地开发设置 Mockito 时遇到问题
- webpack - 为什么 webpack watch 没有更新我的代码?
- twilio - Twilio 重定向标签的问题
- flutter - Flutter - 来自 json 文件的下标
- python - PyQt5 QTabBar paintEvent 带有可以移动的标签