aliyun / aliyun-odps-python-sdk

ODPS Python SDK and data analysis framework
http://pyodps.readthedocs.io
Apache License 2.0
434 stars 97 forks source link

sdk有无方法直接读取整表的行数? #73

Closed yamipis closed 6 years ago

yamipis commented 6 years ago

with table.open_reader() as reader: count = reader.count # How many records of a table or its partition 我看源码中写着支持读取全表总行数,实际运行发现对于分区表使用上述方法或tunnel的download_session.count都要求指定分区。如果我就是只想获得全表的行数,能从sdk的api来实现吗?

loklok-infi commented 6 years ago

#可以这样获取行数
from odps.df import DataFrame
df = DataFrame(table)
df.count()
qinxuye commented 6 years ago

补充下:

非交互式环境,要触发 execute

df = o.get_table('table_name').to_df()
df.count().execute()
yamipis commented 6 years ago

是我的表太大,还是分区的数量太多?(专有云)报错如下: ODPS-0140181:Sql plan exception Could not generate job json. instance count exceeds limit 99999: task‘ M1 Stg1’. instance count '20949' 我不知道这个执行的过程是不是直接把所有分区的值算在一起,返回的结果提示这个执行的任务数超了,没法反馈正确的结果。

qinxuye commented 6 years ago

所有分区的值在一起,超过了能起的 mapper 的个数。

可以设置:

options.sql.settings = { 'odps.sql.mapper.split.size': 256 }

yamipis commented 6 years ago

这样不合适吧?等于还是生成个MR任务运行,不能直接读ots的元数据?

qinxuye commented 6 years ago

Table 或者 Partition 的元数据只会记录物理存储大小,没有行数。

这些超出了 pyodps 范畴,后续还有问题请开工单咨询。

xjr7670 commented 5 years ago

请问下,现在依然是没有办法直接获取到整个表的行数吗?我用了前面转DataFrame的方法,依然会报错说要提供partition

daidai21 commented 4 years ago

是我的表太大,还是分区的数量太多?(专有云)报错如下: ODPS-0140181:Sql plan exception Could not generate job json. instance count exceeds limit 99999: task‘ M1 Stg1’. instance count '20949' 我不知道这个执行的过程是不是直接把所有分区的值算在一起,返回的结果提示这个执行的任务数超了,没法反馈正确的结果。

ds = MAX_PT()可能就是这个的原因 就是要起得mapper数量大于集群的机器数量