当前位置: 首页 > 知识库问答 >
问题:

时间戳未从胶水加载到红移表中

杨学真
2023-03-14

我在csv文件中有yyyy-mm-dd xx:xx:xx格式的时间戳,该文件存储在S3中,但是当我使用timestamp数据类型使用胶水加载到Redshift数据库时,timestamp列为NULL。该格式似乎是有效的,但为了以防万一,我还尝试了yyyymddxxxxxyymddxx:xxx格式。

1,2016 Summer,2016-06-22 00:00:00
Line |    Term     |    Date
-----+-------------+------------
   1 | 2016 Summer |  
Line |    Term     |        Date
-----+-------------+---------------------
   1 | 2016 Summer | 2016-06-22 00:00:00

似乎这应该是一个简单的任务,但我不能把它做对,所以如果其他人能发现我的错误,那将非常感谢。

代码:

val datasource37 = glueContext.getCatalogSource(database = "data", tableName = "term", redshiftTmpDir = "", transformationContext = "datasource37").getDynamicFrame()
val applymapping37 = datasource37.applyMapping(mappings = Seq(("id", "bigint", "id", "bigint"), ("name", "string", "name", "varchar(256)"), ("date", "timestamp", "date_start", "timestamp")), caseSensitive = false, transformationContext = "applymapping37")
val resolvechoice37 = applymapping37.resolveChoice(choiceOption = Some(ChoiceOption("make_cols")), transformationContext = "resolvechoice37")
val dropnullfields37 = resolvechoice37.dropNulls(transformationContext = "dropnullfields37")
val datasink37 = glueContext.getJDBCSink(catalogConnection = "dataConnection", options = JsonOptions("""{"dbtable": "term", "database": "data"}"""), redshiftTmpDir = args("TempDir"), transformationContext = "datasink37").writeDynamicFrame(dropnullfields37)

共有1个答案

阚元白
2023-03-14

我最终从string->timestamp映射,它工作了。Glue让它从timestamp->timestamp自动映射,所以我认为它是正确的。

例如:

val applymapping37 = datasource37.applyMapping
                     (mappings = Seq(("id", "bigint", "id", "bigint"),
                     ("name", "string", "name", "varchar(256)"), 
                     ("date", "string", "date_start", "timestamp")),
                     caseSensitive = false, transformationContext = "applymapping37")
 类似资料:
  • 我需要对S3 bucket执行附加加载。 每天都有新的. gz文件被转储到S3位置,胶水爬虫读取数据并在数据曲库中更新它。 Scala AWS Glue作业运行并仅过滤当前日期的数据。 上面过滤的数据按照一些规则进行转换,并创建一个分区的动态数据帧(即年、月、日)级别。 现在,我需要将这个动态数据帧写入到S3 bucket中,其中包含所有前一天的分区。事实上,我只需要将一个分区写入S3存储桶。目前

  • 我在红移中创建了一个表: 但是,我希望包含额外的3秒,例如:。 我需要如何修改我的时间戳字段,以便以秒为单位插入它的额外精度?

  • 我试图使用COPY命令将一些数据移到redshift中,但是它不喜欢时间戳值的格式。在数据集中,它被格式化为mm/dd/yyyy hh24:mi 然而,它也出现了错误代码1206的cack。 有人知道如何修复它将接受数据中已经设置的时间戳格式的位置吗?

  • 我有一个S3存储桶,每天的文件都会被丢弃。AWS爬虫从该位置爬网数据。在我的glue作业运行的第一天,它将获取AWS crawler创建的表中的所有数据。例如,在第一天就有三个文件。(即file1.txt、file2.txt、file3.txt)和glue job在执行glue job的第一天处理这些文件。第二天,另两个文件到达S3位置。现在,在S3位置,这些是存在的文件。(即file1.txt、

  • 我每天都有csv文件被传递到S3,这些文件在当月是增量的。所以file1包含第1天的数据,file2包含第1天和第2天的数据,等等。每天我都想对该数据运行一个ETL并将其写入不同的S3位置,这样我就可以使用Athena查询它,而不会出现重复的行。本质上,我只想查询聚合数据的最新状态(这只是最近交付给S3的文件的内容)。 我认为书签不会起作用,因为增量交付包含以前文件中的数据,因此会产生重复。我知道

  • 我正在尝试加载一个CVS,其中包含一个数据类型为“timestamp”的字段当我尝试将该数据加载到表中时,会出现以下错误: 谷歌。应用程序编程接口。果心例外情况。BadRequest:400 CSV表遇到太多错误,放弃。行:1;错误:1。 我知道这一列是问题所在,因为当我删除这一列时,数据上传不会出错。我应该如何上传时间戳。 我正在使用bigquery API,python客户端库。 我的数据如下