删除 csv 文件中带有“总计”信息的最后一行

问题描述 投票:0回答:2

我有一个大型 csv 文件,正在使用以下示例格式保存到 Google Cloud Storage:

id,revenue
1,100
2,100
...
Totals
All,12000

或者:

title,profit
titanic,200
avatar,400
fox total,600
paramount total,400
grand total,1000

我希望能够删除总计之后(包括总计)的所有行,因为这并不是 csv 文件中真正有效的信息(它是数据下方 csv 的更多求和信息)。

有办法删除吗?目前,我们将 csv 文件保存到 Google Cloud Storage,然后通过 Big Query 中的 csv-import 直接导入。也许,在通过 BigQuery 或类似的方式导入 csv 时,有一种方法可以将行号附加到 csv 文件中,这样我们就可以在最后执行删除语句?

csv google-bigquery google-cloud-storage
2个回答
1
投票

如果导入后删除 MAX() 行会怎样?

#standardSQL
DELETE
FROM `project.dataset.table` 
WHERE revenue = (
  SELECT revenue
  FROM `project.dataset.table` 
  ORDER BY taxi_trips DESC
  LIMIT 1
)

或者选择 ID“All”:

#standardSQL
DELETE
FROM `project.dataset.table` 
WHERE id = "All"

0
投票

在上传到 BigQuery 之前,我手动计算了要修剪的字节,并将 cat range 输出通过管道传输到 cp 命令。 如果您有大量不同大小的文件,可以添加额外的步骤来查找“Totals”字符串。

$ gsutil cat -r 0-338164333 gs://poc/customer.rpt | gsutil cp - gs://poc/customer_clean.rpt
  1. 识别 EOF 中需要从源中修剪的字节(试验和 错误 ID 84 字节)

    $ gsutil cat -r -84 gs://poc/customer.rpt

    (受影响的 2472334 行) 完成时间:2024-06-21T18:04:46.7263251-04:00

  2. 获取复制文件大小(338164417字节)

    $ gsutil ls -l gs://rogers-poc/customer*

    338164417 2024-06-21T22:31:00Z gs://poc/customer.rpt

  3. 手动计算范围(0-(要修剪的文件大小-字节)并提交

    $ gsutil cat -r 0-338164333 gs://poc/customer.rpt | gsutil cp - gs://poc/customer_clean.rpt

    复制自... / [1 个文件][ 0.0 B/ 0.0 B] 0.0 B/秒
    操作已完成超过 1 个对象。

  4. 确认

    $ gsutil ls -l gs://poc/customer_c*

    338164334 2024-07-08T06:07:38Z gs://poc/customer_clean.rpt

© www.soinside.com 2019 - 2024. All rights reserved.