在您的情况下,我建议您创建一个新表,并为每个表设置适当的过滤器。你可以使用 CREATE TABLE dataset.newtable AS SELECT x FROM T,你可以阅读更多关于它的信息here。因此,您的语法将是:
CREATE TABLE `your_new_table` AS SELECT *
FROM `source_table`
WHERE VALUES LIKE 'HEARTBEAT' AND VALUES LIKE '-7' AND VALUES LIKE '-77'
我在 WHERE 语句中使用了单引号,因为我假设您要过滤的字段是 String。另一种选择是使用函数 REGEXP_CONTAINS(),您可以在here 找到更多相关信息。您的过滤器语法将被简化,如下所示:
WHERE REGEXP_CONTAINS(VALUES,"HEARTBEAT|STRING|STRING")
请注意,您使用上述方法比较的值必须是字符串。因此,在使用它之前,您必须确保此转换,您可以使用CAST() 函数。
另外,如果要删除源表中的行,可以使用DELETE。语法如下:
DELETE `source_table` WHERE field_1 = 'HEARTBEAT'
请注意,您将直接从源表中删除行。
希望对你有帮助。
更新
创建一个包含所需行的新表和另一个包含“已删除”行的表。
#Table with the rows which match the filter and will be "deleted"
#Notice that you have to provide the path to you table
#`project.dataset.your_new_table`
CREATE TABLE `your_new_table` AS
SELECT field1, field2 #select the columns you want
FROM `source_table`
WHERE field1 LIKE 'HEARTBEAT' AND field1 LIKE '-7' AND field1 LIKE '-77'
现在,您将获得在第一步中未通过过滤器的行。它们将与所需的行组成表格,如下所示:
CREATE TABLE `table_desired_rows` AS
SELECT field1, field2 #select the columns you want
FROM `source_table`
WHERE field1 NOT LIKE 'HEARTBEAT'
AND field1 NOT LIKE '-7'
AND field1 NOT LIKE '-77'
现在您有了包含原始数据的源表、包含所需行的另一个表和包含您忽略的行的表。
第二个选项:
如果您不需要原始数据,这意味着您可以修改源表。您可以先创建一个包含被忽略行的表,然后从源数据中删除这些行。
#creating the table with the rows which will be deleted
#notice that you create a new table with these rows
CREATE TABLE `table_ignored_rows` AS
SELECT field1, field2 #select the columns you want
FROM `source_table`
WHERE field1 LIKE 'HEARTBEAT'
AND field1 LIKE '-7'
AND field1 LIKE '-77';
#now deleting the rows from the source table
DELETE `source_table` WHERE field1 LIKE 'HEARTBEAT'
AND field1 LIKE '-7'
AND field1 LIKE '-77';