Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ssis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mapreduce 如何使用Map/reduce脚本删除海量记录?_Mapreduce_Netsuite_Suitescript_Suitescript2.0_Saved Searches - Fatal编程技术网

Mapreduce 如何使用Map/reduce脚本删除海量记录?

Mapreduce 如何使用Map/reduce脚本删除海量记录?,mapreduce,netsuite,suitescript,suitescript2.0,saved-searches,Mapreduce,Netsuite,Suitescript,Suitescript2.0,Saved Searches,我已经创建了一个Map/Reduce脚本,它将获取客户发票并将其删除。如果我根据以下条件在UI中创建已保存的搜索,它将显示400万条记录。现在,如果我运行脚本,在完成“getInputData”阶段之前,执行会停止,因为该阶段的最大存储限制是200Mb。所以,我想从400万条记录中取出前4000条,然后执行它,并将脚本安排为每15分钟一次。这是第一阶段(getInputData)的代码- var计数=0; var计数器=0; var结果=[]; var testSearch=search.cre

我已经创建了一个Map/Reduce脚本,它将获取客户发票并将其删除。如果我根据以下条件在UI中创建已保存的搜索,它将显示400万条记录。现在,如果我运行脚本,在完成“getInputData”阶段之前,执行会停止,因为该阶段的最大存储限制是200Mb。所以,我想从400万条记录中取出前4000条,然后执行它,并将脚本安排为每15分钟一次。这是第一阶段(getInputData)的代码-

var计数=0;
var计数器=0;
var结果=[];
var testSearch=search.create({
键入:“customrecord1”,
过滤器:['custrecord\u date\u created'、'NoNotorAfter'、'sta​rtO​佛罗里达州​扫描隧道显微镜​安大略省​h'],
列:['internalid']
}); 
做{
var resultSearch=testSearch.run().getRange({
开始:计数,
结束:计数+1000
});
对于(var arr=0;arr=1000&&counter!=4000);
返回结果;
在创建保存的搜索过程中,需要花费很长时间,在创建保存的搜索过程中,是否有任何方法可以过滤前4000条记录?

我相信这就是原因所在

search.runPaged
运行当前搜索并返回分页结果的摘要信息-它不会提供结果集或保存搜索


pagedData.fetch
检索指定页面范围内的数据。

为什么不进行自定义批量更新


这将是一个5-10行的脚本,在批量更新的条件中获取当前记录的内部id和记录类型,然后删除该记录。

如果您打算使用Map/Reduce,您只需返回您创建的搜索。Netsuite将运行它并将每行传递到下一阶段。您甚至可以在限制的位置使用保存的搜索行数,然后在总结阶段,如果还有什么事情要做,则重新触发脚本

但4k记录语法是:

var toDelete = [];
search.run().each(function(r){
    toDelete.push(r.id); 
    return toDelete.length < 4000;
});
return toDelete;

是的,在Map/reduce中,我就是这么做的,以获得4k记录。但问题是,首先它将创建保存的搜索,返回400万条记录。这将花费大量时间。一旦创建了保存的搜索,它将返回第一个4k记录到下一个阶段。我正在搜索创建期间过滤结果,搜索中的任何内容。过滤器如果您只创建然后返回搜索对象。不要运行搜索。是的,这可能会起作用。但我正在尝试测试是否可以在Map/reduce中执行此操作。
var toDelete = [];
search.run().each(function(r){
    toDelete.push(r.id); 
    return toDelete.length < 4000;
});
return toDelete;
/**
 * @NApiVersion 2.x
 * @NScriptType MassUpdateScript
 */
define(["N/log", "N/record"], function (log, record) {
    function each(params) {
        try {
            record.delete({
                type: params.type,
                id: params.id
            });
            log.audit({ title: 'deleted ' + params.type + ' ' + params.id, details: '' });
        }
        catch (e) {
            log.error({ title: 'deleting: ' + params.type + ' ' + params.id, details: (e.message || e.toString()) + (e.getStackTrace ? (' \n \n' + e.getStackTrace().join(' \n')) : '') });
        }
    }
    return {
        each:each
    };
});