我有一个重新排序java泛型的问题.据我所知,通用信息仅在编译时可用,通过称为"类型擦除"的过程,一旦编译代码并且生成.class文件,所有TYPE信息都会消失.
一旦.java文件被编译,List myList = new arrayList(),就是.class文件字节码所具有的,即使该列表被声明为.java文件中的字符串列表.
话虽如此,请考虑以下情况.
我有一个带有签名方法的jar
public void check(List<String> p)
Run Code Online (Sandbox Code Playgroud)
当我从另一个代码调用此方法时,编译器强制执行check方法的参数应该List<String>只是,没有别的.
既然检查方法存在于jar(.class文件)中List<String>,如果在生成.class文件时TYPE信息已经被REMOVED,编译器如何知道所需的TYPE信息?
我正在使用 Presto 和 Zeppelin。有很多原始数据。我必须总结这些数据。
我想每 5 秒分组一次。
serviceType logType date
------------------------------------------------------
service1 log1 2017-10-24 23:00:23.206
service1 log1 2017-10-24 23:00:23.207
service1 log1 2017-10-24 23:00:25.206
service2 log1 2017-10-24 23:00:24.206
service1 log2 2017-10-24 23:00:27.206
service1 log2 2017-10-24 23:00:29.302
Run Code Online (Sandbox Code Playgroud)
那么结果
serviceType logType date cnt
--------------------------------------------------------------
service1 log1 2017-10-24 23:00:20 2
service2 log1 2017-10-24 23:00:20 1
service1 log1 2017-10-24 23:00:25 1
service1 log2 2017-10-24 23:00:25 2
Run Code Online (Sandbox Code Playgroud)
首先,我必须将存储的数据迁移到新表。
其次,我必须对数据进行分组并实时保存到新表中。
很难写sql脚本。
请帮我。
我必须使用 python 解释器吗?
我有三张桌子。每个表与其他两个表都有共同的列,在某些属性上有所不同。由于我对 common 属性感兴趣,因此我想发出一个请求以从所有三个表中获取数据。
我需要通过 UNION 从所有三个表中获取项目。在 AWS Athena 中可以吗?
前任:
table1 (att1, att2, att3)
table2 (att1, att2, att_3)
table3 (att1, att2, att3, att4)
Run Code Online (Sandbox Code Playgroud)
目标:从 table1、table2、table3 中获取项目,而无需在同一请求中加入。
我有一个将每日记录加载到 S3 的管道。然后我利用 AWS Glue Crawler 创建分区以促进 AWS Athena 查询。但是,如果与其他数据相比,分区数据很大。
S3 文件夹/文件显示如下:
s3.ObjectSummary(bucket_name='bucket', key='database/table/2019/00/00/2019-00-00.parquet.gzip') 7.8 MB
s3.ObjectSummary(bucket_name='bucket', key='database/table/2019/01/11/2019-01-11.parquet.gzip') 29.8 KB
s3.ObjectSummary(bucket_name='bucket', key='database/table/2019/01/12/2019-01-12.parquet.gzip') 28.5 KB
s3.ObjectSummary(bucket_name='bucket', key='database/table/2019/01/13/2019-01-13.parquet.gzip') 29.0 KB
s3.ObjectSummary(bucket_name='bucket', key='database/table/2019/01/14/2019-01-14.parquet.gzip') 43.3 KB
s3.ObjectSummary(bucket_name='bucket', key='database/table/2019/01/15/2019-01-15.parquet.gzip') 139.9 KB
Run Code Online (Sandbox Code Playgroud)
每行末尾显示文件大小。请注意,2019-00-00.parquet.gzip包含 2019-01-11 之前的所有记录,因此其大小较大。我读过这篇文章,它说“如果您的数据严重偏向一个分区值,并且大多数查询使用该值,那么开销可能会抹去最初的好处。”
所以,我想知道我是否应该分成2019-00-00.parquet.gzip具有不同分区的较小的镶木地板文件。例如,
key='database/table/2019/00/00/2019-00-01.parquet.gzip',
key='database/table/2019/00/00/2019-00-02.parquet.gzip',
key='database/table/2019/00/00/2019-00-03.parquet.gzip', ......
Run Code Online (Sandbox Code Playgroud)
但是,我认为这种分区不是很有用,因为它没有反映旧记录的存储时间。我愿意接受所有解决方法。谢谢你。
我正在查询具有可变长度 JSON 数组的列。
select col.pages[1].name, col.pages[2].name from assoc
Run Code Online (Sandbox Code Playgroud)
当数组中只有一个值时,我收到此错误。
INVALID_FUNCTION_ARGUMENT: Array subscript out of bounds
Run Code Online (Sandbox Code Playgroud)
如果只有一个值,如何防止此错误?
我正在尝试将我的varchar列数据( stringifed )转换JSON为MAP数据类型,以便我可以将数据作为元素引用。
WITH
data(c) AS (
SELECT message from mydb.mytable
),
parsed AS (
SELECT cast(json_parse(c) as map(varchar, varchar)) AS m
FROM data
)
SELECT m['action'], m['uuid']
FROM parsed
Run Code Online (Sandbox Code Playgroud)
示例数据如下所示:
{"action":"send","timestamp":1566432054,"uuid":"1234"}
我尝试了此处提供的解决方案:How to cast varchar to MAP(VARCHAR,VARCHAR) in presto,这是我从values用select语句替换得到查询的地方,但它不起作用。我收到错误:
INVALID_CAST_ARGUMENT: Value cannot be cast to map(varchar,varchar)
我定义了一个分区表,它指向使用日期分区的 S3 存储桶。我在 S3 存储桶中有过去 3 个月的数据。我已经加载了第一个月的分区。但是,在过去的两个月里,我没有使用msck repair table或命令加载分区中的数据。alter table当我尝试查询表时,过去 2 个月的数据不会从 S3 加载,只有最新的分区数据显示在查询结果中。这是预期的吗?如果是这样,为什么?
我尝试为同一个 s3 存储桶创建另一个分区表,但这一次我没有加载任何分区。当我查询该表时,我得到最新的记录。
根据 Google BigQuery 文档,BigQuery 具有以下限制 ( https://cloud.google.com/bigquery/quotas ):
\n\n\n\n\n1) 每个分区表的最大分区数 \xe2\x80\x94 4,000。
\n\n2) 表、查询结果或视图定义中的最大列数 \xe2\x80\x94 10,000
\n
基于 Amazon Athena 文档:( https://docs.aws.amazon.com/athena/latest/ug/service-limits.html ):
\n\n\n\n\n每个分区表的最大分区数 \xe2\x80\x94 20,000
\n
AWS Athena 或 Presto 的列数是否有硬性限制?
\n\n谢谢!
\n我对 SQL 查询相当陌生,并且正在查询 aws athena 数据库。
我的第一个查询将返回给定一些参数的每个独特品牌:
-- query1
SELECT DISTINCT brand
FROM "database"
WHERE product_gap = 'yes' AND store_name = 'petco'
Run Code Online (Sandbox Code Playgroud)
返回这样的列表:
# brand
1 Drs. Doink and Foink
2 Zkukit!
3 Willow
4 Freshz
5 Aquatic Land
6 UniLaws
7 Seraz
.....
Run Code Online (Sandbox Code Playgroud)
依此类推 553 行。如果我选择任何品牌,例如“Seraz”并运行第二个查询,它将返回该品牌的“merch1”列的不同计数
-- query2
SELECT COUNT (DISTINCT merch1)
FROM "database"
WHERE product_gap = 'yes' AND store_name = 'petco' AND brand='Seraz'
Run Code Online (Sandbox Code Playgroud)
返回:
# _col0
1 2
Run Code Online (Sandbox Code Playgroud)
其中 _col0 是 seraz 的 merch1 的不同计数。
我的问题是如何组合我的查询,以便对于来自 query1 的每个唯一品牌结果,它都会运行 …
我有以下字符串:'2019-05-17 04:44:00:000'. 我想将其转换为日期,以便我可以根据时间戳查询我的表。
我尝试了以下导致错误的方法:
select street, city,
from_iso8601_timestamp(starttime)
from mydata where subtype='X';
INVALID_FUNCTION_ARGUMENT: Invalid format: "2019-05-17 04:44:00:000" is
malformed at " 04:44:00:000"
SELECT street, city, date_parse(starttime,'%Y-%m-%d %H:%i:%s')
from mydata where subtype='X';
INVALID_FUNCTION_ARGUMENT: Invalid format: "2019-05-17 04:44:00:000" is malformed at " 04:44:00:000"
Run Code Online (Sandbox Code Playgroud)
在 Athena 中转换它的正确方法是什么?有毫秒参数吗?