Google BigQuery:使用WRITE_TRUNCATE

时间:2016-04-20 14:28:27

标签: python google-bigquery

我希望我能尽可能清楚地理解它。我正在维护有关舞台动作的数据,即当有人进入舞台和有人搬出时。我希望bigquery表为每个阶段的运动提供单一条目(由于我将对数据进行的查询类型)但是有两个进出的更新,所以这就是我正在做的事情;

  1. 当某人进入舞台时正常流媒体插入
  2. 搬出时:

    一个。使用类似

    的查询将截断的表复制到同一目标
    SELECT * FROM my_dataset.my_table WHERE id !="id" 
    

    湾为新行执行流式插入。

  3. 问题是,在复制操作后进行流式插入时会出现随机数据丢失。

    我找到了这个链接:After recreating BigQuery table streaming inserts are not working?

    已经提到在这种情况下在进行流插入之前应该有> 2分钟的延迟以避免数据丢失但是,我希望它是瞬时的,因为多个阶段的移动可能发生在少数几个秒。是否有解决方法或修复此问题?或者我是否必须在仅附加的基础上重新考虑我的完整过程,现在看起来不太可能?

1 个答案:

答案 0 :(得分:0)

  

我是否必须在仅附加的基础上重新考虑我的整个过程?

我对你的具体案例的建议是不要在每一个“搬出”上截断表格。

假设您有标识最近行(时间戳或订单等)的字段,您可以使用类似

的内容轻松过滤旧行
<?php
/**
 * Extension of the default Yii Active Record class
 *
 * Edit this class to add custom behaviour to all the models used within the application
 *
 */

class BaseModel extends CActiveRecord
{

    /**
     * Returns the static model of the specified AR class.
     * Uses the class that called the model() by default
     * @param string $className active record class name.
     * @return static The static model class instance
     */
    public static function model($className = null)
    {
        return parent::model($className !== null ? $className : get_called_class());
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param mixed $pk
     * @param string $condition
     * @param array $params
     * @return static
     */
    public function findByPk($pk,$condition='',$params=array())
    {
        return parent::findByPk($pk,$condition,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param string $condition
     * @param array $params
     * @return static
     */
    public function find($condition='',$params=array())
    {
        return parent::find($condition,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param string $condition
     * @param array $params
     * @return static[]
     */
    public function findAll($condition='',$params=array())
    {
        return parent::findAll($condition,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param $pk
     * @param string $condition
     * @param array $params
     * @return static[]
     */
    public function findAllByPk($pk,$condition='',$params=array())
    {
        return parent::findAllByPk($pk,$condition,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param $attributes
     * @param string $condition
     * @param array $params
     * @return static
     */
    public function findByAttributes($attributes,$condition='',$params=array())
    {
        return parent::findByAttributes($attributes,$condition,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param $attributes
     * @param string $condition
     * @param array $params
     * @return static[]
     */
    public function findAllByAttributes($attributes,$condition='',$params=array())
    {
        return parent::findAllByAttributes($attributes,$condition,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param $sql
     * @param array $params
     * @return static
     */
    public function findBySql($sql,$params=array())
    {
        return parent::findBySql($sql,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @param $sql
     * @param array $params
     * @return static[]
     */
    public function findAllBySql($sql,$params=array())
    {
        return parent::findAllBySql($sql,$params);
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * This will add a couple of milliseconds with every `with` usage
     * @return static
     */
    public function with()
    {
        return call_user_func_array('parent::with', func_get_args());
    }

    /**
     * This function exists only to help the IDE autodetect the returned class
     * @return static
     */
    public function together()
    {
        return parent::together();
    }

}

如果需要,您可以使用与上面相同的方法每天将“旧/非最新”行清除到截断表中

  

哪里提到过?

也许没有明确说明您的情况,但请检查Data availability部分 在How to change the template table schema阅读第三段(我觉得它是相关的)