在机器学习PAI我用hive catalog读取Hive数据时,源表有timestamp类型的字段会报 HiveCatalog currently only supports timestamp of precision 9 ,但是我看了下该字段数据的精度,都是不高的。怎么处理?2023-05-31 17:09:46.949 [INFO]: -> Use one of the following commands to start using PyAlink: - useLocalEnv(parallelism, flinkHome=None, config=None): run PyAlink scripts locally. - useRemoteEnv(host, port, parallelism, flinkHome=None, localIp="localhost", config=None): run PyAlink scripts on a Flink cluster. - getMLEnv(): run PyAlink scripts as PyFlink scripts, support 'flink run -py xxx.py'. Call resetEnv() to reset environment and switch to another.
Warning: You're running the script with 'getMLEnv'. You have to manually add Alink jars to PyFlink lib path to make the script work. Traceback (most recent call last): File "/sunrun-scheduler/process/2814a8325c2244a6bd6b4ddca2be56ef/EEF74930058241ADA2131586CBDC2B4B/883D3B4344F043A3AD54F1F64A1828C3/2814a8325c2244a6bd6b4ddca2be56ef_EEF74930058241ADA2131586CBDC2B4B_883D3B4344F043A3AD54F1F64A1828C3_0_node.py", line 70, in fillna_batchOp.link(target_batchOp) File "/data2/anaconda3/envs/alink/lib/python3.6/site-packages/pyalink/alink/common/types/bases/algo_operator.py", line 126, in link return self.linkTo(op) File "/data2/anaconda3/envs/alink/lib/python3.6/site-packages/pyalink/alink/common/types/bases/algo_operator.py", line 116, in linkTo op.linkFrom(self) File "/data2/anaconda3/envs/alink/lib/python3.6/site-packages/pyalink/alink/batch/base.py", line 57, in linkFrom self.get_j_obj().linkFrom(j_args) File "/data1/tools/flink-1.13.3/opt/python/py4j-0.10.8.1-src.zip/py4j/java_gateway.py", line 1286, in call File "/data1/tools/flink-1.13.3/opt/python/pyflink.zip/pyflink/util/exceptions.py", line 146, in deco File "/data1/tools/flink-1.13.3/opt/python/py4j-0.10.8.1-src.zip/py4j/protocol.py", line 328, in get_return_value py4j.protocol.Py4JJavaError: An error occurred while calling o48.linkFrom. : java.lang.RuntimeException: Fail to create table default.maz0irrism6id6cabklm0a at com.alibaba.alink.common.io.catalog.HiveCatalog.checkTableExistenceBeforeSink(HiveCatalog.java:588) at com.alibaba.alink.common.io.catalog.HiveCatalog.sinkBatch(HiveCatalog.java:510) at com.alibaba.alink.operator.batch.sink.CatalogSinkBatchOp.sinkFrom(CatalogSinkBatchOp.java:42) at com.alibaba.alink.operator.batch.sink.CatalogSinkBatchOp.sinkFrom(CatalogSinkBatchOp.java:17) at com.alibaba.alink.operator.batch.sink.BaseSinkBatchOp.linkFrom(BaseSinkBatchOp.java:44) at com.alibaba.alink.operator.batch.sink.BaseSinkBatchOp.linkFrom(BaseSinkBatchOp.java:27) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.lang.reflect.Method.invoke(Method.java:498) at org.apache.flink.api.python.shaded.py4j.reflection.MethodInvoker.invoke(MethodInvoker.java:244) at org.apache.flink.api.python.shaded.py4j.reflection.ReflectionEngine.invoke(R
该报错提示是因为阿里云机器学习PAI目前只支持精度为9的时间戳类型。而在你的数据中,可能存在精度超过9的时间戳类型,需要检查并作出相应的处理。可以使用Hive函数将时间戳类型按照精度进行转换,例如使用from_unixtime()函数将精度高于9的时间戳转换成精度为9的时间戳。具体方法如下:
对于第一个问题,如果您发现Hive表格中的时间戳字段精度较低,您可以尝试使用Hive的CAST函数将其转换为高精度的时间戳类型,例如:
SELECT CAST(my_timestamp_field AS TIMESTAMP(6)) FROM my_table
在上面的示例中,将时间戳字段转换为精度为6的TIMESTAMP类型。
对于第二个问题,根据错误提示,HiveCatalog目前仅支持精度为9的时间戳类型。如果您的Hive表格中的时间戳字段精度低于9,则可能无法使用HiveCatalog将其读取到Flink中。在这种情况下,您可以尝试使用其他的Flink表格源,例如JDBC或CSV表格源。
另外,从错误日志中的信息来看,可能是因为在创建表格时发生了错误,导致无法将数据写入到表格中。您可以检查表格是否存在,并确保您有足够的权限将数据写入到表格中。
看了一下逻辑,看起来是在sink创建表的逻辑里,hive这里要求timestamp类型的precision为9,那可能需要用sql将输出类型修改为precision为9(有点困难,我还没找到,需要自己找下)两种方法
版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。
人工智能平台 PAI(Platform for AI,原机器学习平台PAI)是面向开发者和企业的机器学习/深度学习工程平台,提供包含数据标注、模型构建、模型训练、模型部署、推理优化在内的AI开发全链路服务,内置140+种优化算法,具备丰富的行业场景插件,为用户提供低门槛、高性能的云原生AI工程化能力。