Athena 无法使用 OpenCSVSerde 解析日期

2024-01-08

我在 S3 上有一个非常简单的 csv 文件

"i","d","f","s"
"1","2018-01-01","1.001","something great!"
"2","2018-01-02","2.002","something terrible!"
"3","2018-01-03","3.003","I'm an oil man"

我正在尝试使用以下命令创建一个表

CREATE EXTERNAL TABLE test (i int, d date, f  float, s string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
LOCATION 's3://mybucket/test/'
TBLPROPERTIES ("skip.header.line.count"="1");

当我查询表时(select * from test)我收到这样的错误:

HIVE_BAD_DATA:
解析字段 1 的字段值“2018-01-01”时出错:对于输入字符串:“2018-01-01”

更多信息:

  • 如果我改变d列改为字符串查询将成功
  • 我之前使用 Athena 解析过文本文件中的日期;我相信使用惰性简单串行器 https://docs.aws.amazon.com/athena/latest/ug/lazy-simple-serde.html
  • 确实seems就像 OpenCSVSerde 的问题

The 文档 https://docs.aws.amazon.com/athena/latest/ug/csv.html明确表示这是受支持的。求有遇到过这种情况的人,或者有什么建议。


事实上,这是一个问题文档 https://docs.aws.amazon.com/athena/latest/ug/csv.html你提到的。您可能指的是这段摘录:

[OpenCSVSerDe] 识别 DATE 类型(如果在 UNIX 中指定) 格式,例如 YYYY-MM-DD,作为 LONG 类型。

可以理解的是,您将日期格式设置为 YYYY-MM-DD。然而,文档中的这句话具有很大的误导性。当提到UNIX格式时,它实际上有UNIX 纪元时间 https://en.wikipedia.org/wiki/Unix_time心里。

根据 UNIX Epoch 的定义,您的日期应该是整数(因此在文档中引用了 LONG 类型)。您的日期应该是自 1970 年 1 月 1 日以来经过的天数。

例如,您的示例 CSV 应如下所示:

"i","d","f","s"
"1","17532","1.001","something great!"
"2","17533","2.002","something terrible!"
"3","17534","3.003","I'm an oil man"

然后你可以运行完全相同的命令:

CREATE EXTERNAL TABLE test (i int, d date, f  float, s string)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
LOCATION 's3://mybucket/test/'
TBLPROPERTIES ("skip.header.line.count"="1");

如果您使用以下命令查询 Athena 表select * from test, 你会得到:

  i       d          f              s           
 --- ------------ ------- --------------------- 
  1   2018-01-01   1.001   something great!     
  2   2018-01-02   2.002   something terrible!  
  3   2018-01-03   3.003   I'm an oil man    

类似的问题也损害了上述文档中对 TIMESTAMP 的解释:

[OpenCSVSerDe] 识别 TIMESTAMP 类型(如果在 UNIX 格式,例如yyyy-mm-dd hh:mm:ss[.f...],作为 LONG 类型。

这似乎表明我们应该将 TIMESTAMP 格式化为yyyy-mm-dd hh:mm:ss[.f...]。并不真地。事实上,我们需要再次使用 UNIX Epoch Time,但这次使用的是自 1970 年 1 月 1 日午夜以来经过的毫秒数。

例如,考虑以下示例 CSV:

"i","d","f","s","t"
"1","17532","1.001","something great!","1564286638027"
"2","17533","2.002","something terrible!","1564486638027"
"3","17534","3.003","I'm an oil man","1563486638012"

以及以下 CREATE TABLE 语句:

CREATE EXTERNAL TABLE test (i int, d date, f  float, s string, t timestamp)
ROW FORMAT SERDE 'org.apache.hadoop.hive.serde2.OpenCSVSerde' 
LOCATION 's3://mybucket/test/'
TBLPROPERTIES ("skip.header.line.count"="1");

这将是结果集select * from test:

  i       d          f              s                       t             
 --- ------------ ------- --------------------- ------------------------- 
  1   2018-01-01   1.001   something great!      2019-07-28 04:03:58.027  
  2   2018-01-02   2.002   something terrible!   2019-07-30 11:37:18.027  
  3   2018-01-03   3.003   I'm an oil man        2019-07-18 21:50:38.012  
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Athena 无法使用 OpenCSVSerde 解析日期 的相关文章

  • 使用 python 从 CSV 创建字典

    我有一个 CSV 格式的文件 其中 A B 和 C 是标题 我如何以Python方式将此CSV转换为以下形式的字典 A 1 B 4 C 7 A 2 B 5 C 8 A 3 B 6 C 9 到目前为止我正在尝试以下代码 import csv
  • Perl 脚本(或任何东西)来合计 CSV 列

    我写了 在其他人的很多帮助下 awk command https stackoverflow com questions 4159224 excel and awk disagree about csv totals 4159404 415
  • 使用 boost::spirit::qi 解析键入的 csv 文件

    我想解析带有键入值的 CSV 文件 每列的类型在标题中定义 例如 int double double int unsigned 12 1 3 23445 1 42 45 46 47 48 49 结果数据结构可能类似于这个二维向量 using
  • 将 CSV 文件读取到嵌套对象

    我有 CSV 文件 例如 Title Column Value A Z1 1 A Z1 2 A Z1 3 A Z2 1 A Z2 5 B Z3 4 B Z3 6 我想将此 csv 文件读入以下类层次结构 我想最终得到一个列表MyClass
  • 使用 Ruby CSV 在第 1 行中进行非法引用

    我收到此错误 Illegal quoting in line 1 CSV MalformedCSVError 我的文件中的第 1 行如下 Status Internal ID Language Created At Updated At I
  • OpenCV 机器学习算法的 CSV 格式

    OpenCV 中的机器学习算法似乎使用以 CSV 格式读取的数据 参见示例这个 cpp文件 https code ros org trac opencv browser trunk opencv samples c tree engine
  • 创建一个 .rwl 对象

    我有一些树数据想要处理dplr包裹 我的问题是我只有 Excel 文件形式的数据 因此我将数据导出为 csv 然后将其输入 R 中 a lt read csv file 我需要将这些数据转换为 rwl能够运行一些dplr功能 我的猜测是我需
  • scala/spark 代码不允许在 hive 中添加列

    如果源数据有新列 我尝试在 Hive 表中添加一列 所有新列的检测都运行良好 但是 当我尝试将列添加到目标表时 我收到此错误 for f lt df schema fields if f name chk spark sqlContext
  • hive 中的授予权限在 hdp2.2 上不起作用

    我正在 CentOS 6 5 上使用 Ambari 设置来试验 HDP2 2 集群 但在运行 Hive GRANT 查询时遇到问题 例如 一个查询 grant select on Tbl1 to user root 给了我一个看起来像这样的
  • MySQL 导入 125000 行 CSV 的最快方法?

    这是我第一次使用 MySQL 除了对现有数据库进行一些基本查询之外 所以我不擅长解决这个问题 我有一个包含 125 000 条记录的 CSV 我想将其加载到 MySQL 中 我安装了版本 8 和工作台 我使用导入向导加载 CSV 它开始导入
  • 如何避免 pandas 在保存的 csv 中创建索引

    我试图在对文件进行一些编辑后将 csv 保存到文件夹中 每次我使用pd to csv C Path of file csv csv 文件有一个单独的索引列 我想避免将索引打印到 csv 我试过 pd read csv C Path to f
  • 总分配超过堆内存的 95.00%(960,285,889 字节)- pyspark 错误

    我用 python 2 7 编写了一个脚本 使用 pyspark 将 csv 转换为 parquet 和其他内容 当我在小数据上运行脚本时 它运行良好 但是当我在更大的数据 250GB 上运行脚本时 我遇到了以下错误 总分配超过堆内存的 9
  • 有谁知道一种更快的方法来执行 String.Split() 吗?

    我正在读取 CSV 文件的每一行 并且需要获取每一列中的各个值 所以现在我只是使用 values line Split delimiter where line是保存由分隔符分隔的值的字符串 衡量我的表现ReadNextRow我注意到它花费
  • 对 CSV 文件中的列进行分组并连接另一列的值

    我刚刚开始使用 PowerShell 在任何地方都找不到这个问题的答案 尝试编写一个脚本来导入 CSV 文件并搜索该文件以查看是否有任何名称相同 如果名称相同 我想将所有这些值写在同一行上 并且只显示名称一次 例如 Name Number
  • hive regexp_extract 怪异

    我在 regexp extract 方面遇到一些问题 我正在查询制表符分隔的文件 我正在检查的列具有如下所示的字符串 abc def ghi 现在 如果我这样做 select distinct regexp extract name 0 f
  • 在iPhone上将CSV文件读入sqlite3

    有没有办法在iPhone上将CSV文件读入sqlite3 sqlite3 是否有类似于 SQL 命令的功能 LOAD DATA LOCAL INFILE file csv INTO TABLE TABLENAME FIELDS TERMIN
  • 使用 Pandas 从 csv 文件读取标题信息

    我有一个包含 14 行标题的数据文件 在标头中 有经纬度坐标和时间的元数据 我目前正在使用 pandas read csv filename delimiter header 14 读取文件 但这只是获取数据 我似乎无法获取元数据 有人知道
  • 如何将 CSV 文件读入 .NET 数据表

    如何将 CSV 文件加载到System Data DataTable 根据CSV文件创建数据表 常规 ADO net 功能是否允许这样做 我一直在使用OleDb提供者 但是 如果您正在读取具有数值的行 但希望将它们视为文本 则会出现问题 但
  • HIVE - 使用WITH CLAUSE插入覆盖

    我有一个生成的查询以WITH子句开头 当我在控制台中运行它时 当我尝试使用INSERT OVERWRITE运行查询以将输出加载到单独的配置单元表中时 该查询工作正常 INSERT OVERWRITE TABLE proc db master
  • pandas.read_csv 将列名移动一倍

    我正在使用位于的 ALL zip 文件here http www fec gov disclosurep PDownload do 我的目标是用它创建一个 pandas DataFrame 但是 如果我跑 data pd read csv

随机推荐

  • 如何为 Spring Security 的 SecurityConfig 编写单元测试

    我有一个 Spring Security 类 用于验证用户的令牌 我从Auth0网站获取代码并修改antMatcher我的配置的一部分 这是代码 EnableWebSecurity public class SecurityConfig V
  • 在 numpy 中从较小的矩阵创建较大的矩阵

    我有3个矩阵A B C 我希望创建一个更大的矩阵形式 D 0 A B C 如何在 Numpy 中做到这一点 This numpy bmat numpy zeros appropriate shape A B C 有效 但我不确定如何避免创建
  • Couchbase、减少过大误差

    在我的工作中 我使用 couchbase 但遇到了一些问题 在我调用聚合视图之后 数据从某些设备到达 couchbase 该视图必须通过 2 个键聚合值 timestamp 和 deviceId 在我尝试聚合超过 10k 的值之前 一切都很
  • 在 React Native 中,如何制作像 Instagram 这样的交互式点击并按住模式?

    Instagram 有一个非常酷的交互功能 您可以点击并按住 也称为长按 图像 然后会出现一个交互式弹出窗口 一旦出现 您可以将手指拖动到操作按钮之一 然后移开手指即可应用该操作并关闭弹出窗口 Here it is in action An
  • 将命令行参数传递给使用 Padre 运行的 Perl 程序

    有没有办法将命令行参数传递给从 Padre 菜单 运行 gt 运行脚本 运行的 Perl 程序 在 工具 gt 首选项 gt 语言 Perl5 下 设置 脚本参数 并保存 或者在 工具 gt 首选项 gt 高级 下 查看 run scrip
  • OAuth 2.0 生成令牌和秘密令牌 [关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 我正在使用 Apache Oltu
  • 如何动态添加静态资源到spring-boot jar应用程序?

    我有 spring boot 应用程序 它创建带有 html 静态页面的目录 当我通过命令启动应用程序时 mvn spring boot run一切正常 包含静态页面的文件夹创建于 resources 目录和客户端可以访问页面 但我希望将我
  • 通过 sqlalchemy 和 pyodbc 访问 MS SQL 数据库时出现“登录超时已过期”错误

    因此 我在让 sqlalchemy 和 pyodbc 与远程 MS SQL Server 一起使用时遇到了一些麻烦 本地 sqlcmd 工作正常 但当我尝试通过 python 代码读取数据库时却无法正常工作 任何帮助 将不胜感激 环境 Ce
  • PHP FILTER_VALIDATE_EMAIL 最大长度

    使用 PHP 时允许的最大字符长度是多少FILTER VALIDATE EMAIL 我正在测试我的脚本来测试允许的最大长度 200 的函数 但是当我使用超过 200 个字符的电子邮件时 PHPFILTER VALIDATE EMAIL返回假
  • DataBase(datamodel)建立文件夹结构

    计划用 Java 构建基于文件夹的结构 我将使用 GUI 的 jquery 插件 因此我不需要有关如何显示文件夹结构的信息 我正在寻找有关如何存储文件夹信息的后端逻辑 以便可以快速有效地检索它 每个文件夹都会有多个子文件夹 从叶文件夹中 我
  • 扩展 DOMDocument 和 DOMNode:返回对象的问题

    我正在尝试扩展 DOMDocument 类 以便使 XPath 选择更容易 我写了这段代码 class myDOMDocument extends DOMDocument function selectNodes xpath oxpath
  • Airflow 远程日志记录不起作用

    我有一个正在运行的 Apache Airflow 1 8 1 实例 我有一个工作连接 及其 ID 可以写入 Google Cloud Storage 并且我的气流用户有权写入存储桶 我尝试通过添加来使用远程日志存储功能 remote bas
  • 如何在 C# 中以编程方式创建 XML 站点地图

    我正在建立一个网站 现在我想创建它的 xml 站点地图 就像 google 站点地图一样 但我想使用 C 以编程方式创建它 谁能告诉我如何使用网站的基本 url 访问 Web 服务器上的根目录 将所有页面列表放入字符串列表中 来得容易 pr
  • 文件中的正则表达式 re.sub 列表

    我有一个文本列表 可以使用以下内容重新编辑 re sub 0000 1111 data 替换模式 4 4 3 3 with 1 4 2 3对于 shell 中的一个输入 效果也很好 然而 我尝试在列表中使用这种模式给了我一个 第一行出现不良
  • 调用 HP ePrint Android 应用程序

    我正在开发一个 Android 应用程序 它应该调用 Android HP ePrint 应用程序进行无线打印 为此 我使用代码 Intent intent new Intent com hp android print PRINT int
  • 在 BigQueryIO.write() 操作之后执行进程

    我有一个以 BigQuery 表作为接收器的管道 我需要在数据写入 BigQuery 后执行一些步骤 这些步骤包括对该表执行查询 从中读取数据以及写入不同的表 如何实现以上目标 我是否应该为后者创建一个不同的管道 但在第一个管道之后调用它将
  • Spring:/** 和 /* 在路径方面的差异

    当我们引用路径时 两个星号和一个星号有什么区别 早些时候我正在调试我的 Spring 3 项目 我试图使用添加 swf
  • 在IRB中,我可以查看我之前定义的方法的源代码吗?

    如果我在 IRB 中定义了一个方法 是否有办法在稍后的会话中查看其来源 gt def my method gt puts hi gt end 稍后输出几个屏幕我希望能够写出类似的东西 gt source my method 并返回 gt d
  • Xcode 8.1 - 如何更新故事板中所有视图的框架?

    在 Xcode 8 1 中 我可以通过单击 更新框架 按钮来更新故事板中的每个视图 但我想更新所有视图 我该怎么做 They added one standalone button to the leftmost side in the c
  • Athena 无法使用 OpenCSVSerde 解析日期

    我在 S3 上有一个非常简单的 csv 文件 i d f s 1 2018 01 01 1 001 something great 2 2018 01 02 2 002 something terrible 3 2018 01 03 3 0