是否可以通过分区对S3文件进行最简单的并发SQL查询
问题是,你必须从3个选项中选择2个。
您可以使用S3 Select对S3进行并发SQL查询。但是S3 Select不支持分区,它一次只能处理一个文件。
Athena支持分区和SQL查询,但它的并发查询限制为20个。限额可以提高,但没有保证和上限。
您可以通过EMRFS配置在S3上工作的HBase,但这需要很多配置。我认为数据应该通过HBase(另一种格式(来写入<也许更简单的解决方案>也许更简单的解决方案>
您还可以使用像AWS Glue或AWS EMR这样的托管服务。
可以在Glue中运行的示例代码:
import sys
from awsglue.transforms import *
from awsglue.utils import getResolvedOptions
from pyspark.context import SparkContext
from awsglue.context import GlueContext
from awsglue.job import Job
## @params: [JOB_NAME]
args = getResolvedOptions(sys.argv, ['JOB_NAME'])
sc = SparkContext()
glueContext = GlueContext(sc)
spark = glueContext.spark_session
job = Job(glueContext)
job.init(args['JOB_NAME'], args)
def load_dict(_database,_table_name):
ds = glueContext.create_dynamic_frame.from_catalog(database = _database, table_name = _table_name, transformation_ctx = "ds_table")
df = ds.toDF()
df.createOrReplaceTempView(_table_name)
return df
df_tab1=load_dict("exampledb","tab1")
df_sql=spark.sql( "select m.col1, m.col2 from tab1 m")
df_sql.write.mode('overwrite').options(header=True, delimiter = '|').format('csv').save("s3://com.example.data/tab2")
job.commit()
您也可以考虑使用亚马逊红移频谱。
https://aws.amazon.com/blogs/big-data/amazon-redshift-spectrum-extends-data-warehousing-out-to-exabytes-no-loading-required/