- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在尝试使用 python 连接到 AWS Athena。我正在尝试使用 pyathenajdbc 来完成这项任务。我遇到的问题是获得连接。当我运行下面的代码时,我收到一条错误消息,指出找不到 AthenaDriver。 (java.lang.RuntimeException:找不到类 com.amazonaws.athena.jdbc.AthenaDriver)。我确实从 AWS 下载了这个文件,我已经确认它位于该目录中。
from mdpbi.rsi.config import *
from mdpbi.tools.functions import mdpLog
from pkg_resources import resource_string
import argparse
import os
import pyathenajdbc
import sys
SCRIPT_NAME = "Athena_Export"
ATHENA_JDBC_CLASSPATH = "/opt/amazon/athenajdbc/AthenaJDBC41-1.0.0.jar"
EXPORT_OUTFILE = "RSI_Export.txt"
EXPORT_OUTFILE_PATH = os.path.join(WORKINGDIR, EXPORT_OUTFILE)
def get_arg_parser():
"""This function returns the argument parser object to be used with this script"""
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
return parser
def main():
args = get_arg_parser().parse_args(sys.argv[1:])
logger = mdpLog(SCRIPT_NAME, LOGDIR)
SQL = resource_string("mdpbi.rsi.athena.resources", "athena.sql")
conn = pyathenajdbc.connect(
s3_staging_dir="s3://athena",
access_key=AWS_ACCESS_KEY_ID,
secret_key=AWS_SECRET_ACCESS_KEY,
region_name="us-east-1",
log_path=LOGDIR,
driver_path=ATHENA_JDBC_CLASSPATH
)
try:
with conn.cursor() as cursor:
cursor.execute(SQL)
logger.info(cursor.description)
logger.info(cursor.fetchall())
finally:
conn.close()
return 0
if __name__ == '__main__':
rtn = main()
sys.exit(rtn)
Traceback (most recent call last): File "/usr/lib64/python2.7/runpy.py", line 174, in _run_module_as_main "main", fname, loader, pkg_name) File "/usr/lib64/python2.7/runpy.py", line 72, in _run_code exec code in run_globals File "/home/ec2-user/jason_testing/mdpbi/rsi/athena/main.py", line 53, in rtn = main() File "/home/ec2-user/jason_testing/mdpbi/rsi/athena/main.py", line 39, in main driver_path=athena_jdbc_driver_path File "/opt/mdpbi/Python_Envs/2.7.10/local/lib/python2.7/dist-packages/pyathenajdbc/init.py", line 65, in connect driver_path, **kwargs) File "/opt/mdpbi/Python_Envs/2.7.10/local/lib/python2.7/dist-packages/pyathenajdbc/connection.py", line 68, in init jpype.JClass(ATHENA_DRIVER_CLASS_NAME) File "/opt/mdpbi/Python_Envs/2.7.10/lib64/python2.7/dist-packages/jpype/_jclass.py", line 55, in JClass raise _RUNTIMEEXCEPTION.PYEXC("Class %s not found" % name)
最佳答案
JDBC 驱动程序需要 Java 8。我目前运行的是 Java 7。我能够在 EC2 实例上安装另一个版本的 Java。
https://tecadmin.net/install-java-8-on-centos-rhel-and-fedora/#
我还必须在我的代码中设置 java 版本。通过这些更改,代码现在可以按预期运行。
from mdpbi.rsi.config import *
from mdpbi.tools.functions import mdpLog
from pkg_resources import resource_string
import argparse
import os
import pyathenajdbc
import sys
SCRIPT_NAME = "Athena_Export"
def get_arg_parser():
"""This function returns the argument parser object to be used with this script"""
parser = argparse.ArgumentParser(description=__doc__, formatter_class=argparse.RawDescriptionHelpFormatter)
return parser
def main():
args = get_arg_parser().parse_args(sys.argv[1:])
logger = mdpLog(SCRIPT_NAME, LOGDIR)
SQL = resource_string("mdpbi.rsi.athena.resources", "athena.sql")
os.environ["JAVA_HOME"] = "/opt/jdk1.8.0_121"
os.environ["JRE_HOME"] = "/opt/jdk1.8.0_121/jre"
os.environ["PATH"] = "/opt/jdk1.8.0_121/bin:/opt/jdk1.8.0_121/jre/bin"
conn = pyathenajdbc.connect(
s3_staging_dir="s3://mdpbi.data.rsi.out/",
access_key=AWS_ACCESS_KEY_ID,
secret_key=AWS_SECRET_ACCESS_KEY,
schema_name="rsi",
region_name="us-east-1"
)
try:
with conn.cursor() as cursor:
cursor.execute(SQL)
logger.info(cursor.description)
logger.info(cursor.fetchall())
finally:
conn.close()
return 0
if __name__ == '__main__':
rtn = main()
sys.exit(rtn)
关于python - 使用 Python 和 pyathenajdbc 连接 Athena,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43006368/
我在 Athena 中成功创建了数据库表。请参阅下面的查询。 CREATE EXTERNAL TABLE IF NOT EXISTS s3_access_logs_db.wafbucket_lo
我正在尝试与 aws athena 合作,对我们存储在 s3 中的 json 文件进行一些查询。所以,我设法创建了一个简单的模式,一切似乎都很好,直到我注意到我的一些文件没有被考虑在内。 文件的键是用
这个问题在这里已经有了答案: AWS ATHENA: user-defined variables (4 个答案) 关闭去年。 我在 aws-athena 中有一个 SQL,它看起来或多或少像这样
刚接触 AWS,第一次使用 Athena。将不胜感激任何帮助/澄清。 我将查询结果位置设置为 s3://aws-athena-query-results-{ACCOUNTID}-{Region},无论
我正在尝试使用 Aws Athena 在 csv 文件上创建一个外部表,代码如下,但行 TBLPROPERTIES ("skip.header.line.count"="1")不起作用:它不会跳过 c
我需要将表中的某些字段隐藏到特定用户组。 我想到了创建一个查看 这允许我屏蔽这些字段。但是,一旦将权限设置为仅授予对 View 的访问权限,查询就会失败,因为它们还需要访问在 View 下正在查询的表
在 Athena 中创建表时,我无法使用特定文件创建表。有没有办法从给定的存储桶中选择以“year_2019”开头的所有文件?例如 s3://bucketname/prefix/year_2019*.
我有这个查询: SHOW PARTITIONS tablename; 结果是: dt=2018-01-12 dt=2018-01-20 dt=2018-05-21 dt=2018-04-07 dt=2
我一直在使用以下查询在 Athena 中创建一个表, CREATE EXTERNAL TABLE IF NOT EXISTS test.test_table ( `converteddat
我想将字符串的数据类型(例如:'2018-03-27T00:20:00.855556Z')转换为时间戳(例如:'2018-03-27 00:20:00')。 实际上我在 Athena 中执行查询: s
该表有一列像这样, data MAP 和行喜欢, id | data 1 | {"foo": 123} 2 | {"bar": 456} 那么,如何搜索 data["bar"] = 456? 我
我觉得这应该很简单,但我一直在努力寻找正确的术语,请耐心等待。 我有两列,timestamp和 voltages这是数组 如果我做一个简单的 SELECT timestamp, voltages FR
我正在尝试从超集访问 Athena,连接成功并且可以在 SQL 编辑器中看到所有模式和表(启用在 SQL 实验室中公开此数据库)。 在 SQL 编辑器上加载元数据时返回以下错误: ERROR OCCU
有没有人尝试过从 Oracle Data Integrator 连接 AWS Athena。 我一直在尝试这个,但我找不到合适的 JDBC 连接字符串。 我遵循的步骤 https://docs.aws
运行 MSCK repair tablename 命令时,athena查询编辑器返回错误 tables not in metastore . 但是表存在,我可以在该表上查询。 我有数据保存在 S3形式
我想通过 API 在 Athena 中创建一个数据库。我在 S3 中有 Parquet 文件,我想使用 API 进行查询,我想使用 Athena 进行查询。 无论如何,我可以通过 Athena 的 A
如何从嵌套的 json 文件创建 Athena 表?这是我的示例 json 文件。我只需要选定的键值对,例如 roofcondition 和 garagestalls。 { "reportId":
如何从嵌套的 json 文件创建 Athena 表?这是我的示例 json 文件。我只需要选定的键值对,例如 roofcondition 和 garagestalls。 { "reportId":
我在 Amazon Athena 中获得了一张表,其中一列包含 XML 数据。这可能不是最好的方法,但我需要利用现有的资源。 据我所知,没有原生支持从这些 XML 中提取数据(比如使用 XPATH 等
我得到了以下格式的带有嵌套结构的 JSON 文档 { "id": "p-1234-2132321-213213213-12312", "name": "athena to the re
我是一名优秀的程序员,十分优秀!