Ограничение 4k , которое удалено в выпуске служб интеграции SQL Server 2012 года, применяется только к выражениям.
Поэтому, если вам нужно спуститься по маршруту, в котором вы сейчас путешествуете, построив исходный запрос, объединив все эти идентификаторы пользователя вместе, прекратите использование выражения и выполните конкатенацию строк в задаче скрипта.
Пример кода
Dts.Variables[SourceQuery].Value = string.Format("select * from dept where dept in ({0}), Dts.Variables[EmpList].Value.ToString());
Я создал простой пакет. Задача сценария, связанная с потоком данных с переменной, определенной как QuerySource
, и использовать следующую логику для построения длинной строки, которая затем будет запрашивать таблицу.
// 551 characters
string baseQuery = @"
SELECT
AC.object_id
, AC.name
, AC.column_id
, AC.system_type_id
, AC.user_type_id
, AC.max_length
, AC.precision
, AC.scale
, AC.collation_name
, AC.is_nullable
, AC.is_ansi_padded
, AC.is_rowguidcol
, AC.is_identity
, AC.is_computed
, AC.is_filestream
, AC.is_replicated
, AC.is_non_sql_subscribed
, AC.is_merge_published
, AC.is_dts_replicated
, AC.is_xml_document
, AC.xml_collection_id
, AC.default_object_id
, AC.rule_object_id
, AC.is_sparse
, AC.is_column_set
FROM
sys.all_columns AS AC
WHERE
AC.object_id IN (0{0});";
System.Text.StringBuilder sb = new System.Text.StringBuilder();
for (int i = 0; i < 1000; i++)
{
sb.Append(',');
sb.Append(i);
}
string queryFinal = string.Format(baseQuery, sb.ToString());
MessageBox.Show(queryFinal.Length.ToString());
Dts.Variables["QuerySource"].Value = queryFinal;
При выполнении, вот
[/g2]
Внутри моего потока данных я использую команду SQL из переменной, так как это единственное, что будет иметь смысл, учитывая, что мы используем переменную ...
[/g3]
Если я правильно понял ваш вопрос, то, думаю, приведенный ниже код поможет решить вашу проблему. Это все ванильный JavaScript и не использует никаких функций d3.
По сути, я проанализировал вашу строку данных в массив записей. Я анализирую текущую запись в обратном вызове reduce
, чтобы увидеть, имеет ли она большее значение свойства, чем текущий элемент max
- если это так, она становится новым элементом max
.
Я предоставил функцию под названием getMax
, которая принимает массив данных, который я упомянул, в качестве первого параметра. getMax
принимает второй параметр, который используется для определения максимального значения свойства, которое вы хотите найти.
Вы можете увидеть в демонстрации ниже, что я запускаю каждое из имен ваших свойств через функцию, и вы можете видеть, как меняются наборы данных. Надеюсь, это поможет!
function parse(s) {
return s.split('\n').filter(el => el.length);
}
function generatePropertyKey(s) {
var suffix = s.charAt(0).toUpperCase();
suffix += s.substring(1);
return `max${suffix}`;
}
function getMax(data, properyName) {
var o = data.reduce((accum, el, idx) => {
if (idx > 0) {
var mk = generatePropertyKey(properyName),
[
sepalLength,
sepalWidth,
petalLength,
petalWidth,
species
] = el.split(',')
var mv;
switch (properyName) {
case 'sepalLength':
mv = sepalLength;
break;
case 'sepalWidth':
mv = sepalWidth;
break;
case 'petalLength':
mv = petalLength;
break;
case 'petalWidth':
mv = petalWidth;
break;
}
if (!accum[species] || (accum[species] && mv > accum[species][mk])) {
accum[species] = {
[mk]: mv,
sepalLength,
sepalWidth,
petalLength,
petalWidth
};
delete accum[species][properyName];
}
}
return accum;
}, {});
return o;
}
//Demo code:
var data = parse(document.querySelector('#data').innerHTML);
var options = [
'sepalLength',
'sepalWidth',
'petalLength',
'petalWidth'
];
console.log(options.map(el => getMax(data, el)))
pre {
display: none;
}
<pre id="data">
sepalLength,sepalWidth,petalLength,petalWidth,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
5.4,3.9,1.7,0.4,setosa
4.6,3.4,1.4,0.3,setosa
5,3.4,1.5,0.2,setosa
5.3,3.7,1.5,0.2,setosa
5,3.3,1.4,0.2,setosa
6.8,2.8,4.8,1.4,versicolor
6.7,3,5,1.7,versicolor
6,2.9,4.5,1.5,versicolor
5.7,2.6,3.5,1,versicolor
5.5,2.4,3.8,1.1,versicolor
5.5,2.4,3.7,1,versicolor
5.8,2.7,3.9,1.2,versicolor
6,2.7,5.1,1.6,versicolor
5.4,3,4.5,1.5,versicolor
6,3.4,4.5,1.6,versicolor
6.7,3.1,4.7,1.5,versicolor
6.3,2.3,4.4,1.3,versicolor
5.6,3,4.1,1.3,versicolor
5.5,2.5,4,1.3,versicolor
5.5,2.6,4.4,1.2,versicolor
6.1,3,4.6,1.4,versicolor
5.8,2.6,4,1.2,versicolor
5,2.3,3.3,1,versicolor
5.6,2.7,4.2,1.3,versicolor
5.7,3,4.2,1.2,versicolor
5.7,2.9,4.2,1.3,versicolor
6.2,2.9,4.3,1.3,versicolor
5.1,2.5,3,1.1,versicolor
5.7,2.8,4.1,1.3,versicolor
6.3,3.3,6,2.5,virginica
5.8,2.7,5.1,1.9,virginica
7.1,3,5.9,2.1,virginica
5.8,2.8,5.1,2.4,virginica
6.4,3.2,5.3,2.3,virginica
6.5,3,5.5,1.8,virginica
7.7,3.8,6.7,2.2,virginica
7.7,2.6,6.9,2.3,virginica
6,2.2,5,1.5,virginica
6.9,3.2,5.7,2.3,virginica
5.6,2.8,4.9,2,virginica
7.7,2.8,6.7,2,virginica
6.3,2.7,4.9,1.8,virginica
6.7,3.3,5.7,2.1,virginica
7.2,3.2,6,1.8,virginica
6.2,2.8,4.8,1.8,virginica
6.1,3,4.9,1.8,virginica
6.4,2.8,5.6,2.1,virginica
7.2,3,5.8,1.6,virginica
7.4,2.8,6.1,1.9,virginica
7.9,3.8,6.4,2,virginica
6.4,2.8,5.6,2.2,virginica
6.3,2.8,5.1,1.5,virginica
6.1,2.6,5.6,1.4,virginica
7.7,3,6.1,2.3,virginica
6.3,3.4,5.6,2.4,virginica
6.4,3.1,5.5,1.8,virginica
</pre>
Вы можете найти объект, который имеет maxSepalLength
в массиве leaves
и добавить его к возвращенному объекту:
return { maxSepalLength , ...leaves.find(e => e.sepalLength === maxSepalLength) }
РЕДАКТИРОВАТЬ:
[ 1113] Вы можете уменьшить количество итераций, используяreduce
вместо d3.max
:
maxdata = d3.nest()
.key(function (d) { return d.species; })
.rollup(function (leaves) {
return leaves.reduce((max, curr) => {
max['maxSepalLength'] = max['maxSepalLength'] || 0;
if(max['maxSepalLength'] < curr.sepalLength)
max = {...curr, maxSepalLength : curr.sepalLength};
return max;
}, {});
})
.entries(irisdata)
var irisdata = d3.csvParse(d3.select("pre#data").text());
console.log({ irisdata })
irisdata.forEach(function (d) {
d.sepalLength = +d.sepalLength;
});
maxdata = d3.nest()
.key(function (d) { return d.species; })
.rollup(function (leaves) {
var maxSepalLength = d3.max(leaves, function (x) { return x.sepalLength })
return { maxSepalLength , ...leaves.find(e => e.sepalLength === maxSepalLength) }
})
.entries(irisdata)
console.log({maxdata})
pre {
display:none;
}
<script src="https://cdnjs.cloudflare.com/ajax/libs/d3/5.7.0/d3.min.js"></script>
<pre id="data">
sepalLength,sepalWidth,petalLength,petalWidth,species
5.1,3.5,1.4,0.2,setosa
4.9,3,1.4,0.2,setosa
4.7,3.2,1.3,0.2,setosa
4.6,3.1,1.5,0.2,setosa
5,3.6,1.4,0.2,setosa
5.4,3.9,1.7,0.4,setosa
4.6,3.4,1.4,0.3,setosa
5,3.4,1.5,0.2,setosa
5.3,3.7,1.5,0.2,setosa
5,3.3,1.4,0.2,setosa
6.8,2.8,4.8,1.4,versicolor
6.7,3,5,1.7,versicolor
6,2.9,4.5,1.5,versicolor
5.7,2.6,3.5,1,versicolor
5.5,2.4,3.8,1.1,versicolor
5.5,2.4,3.7,1,versicolor
5.8,2.7,3.9,1.2,versicolor
6,2.7,5.1,1.6,versicolor
5.4,3,4.5,1.5,versicolor
6,3.4,4.5,1.6,versicolor
6.7,3.1,4.7,1.5,versicolor
6.3,2.3,4.4,1.3,versicolor
5.6,3,4.1,1.3,versicolor
5.5,2.5,4,1.3,versicolor
5.5,2.6,4.4,1.2,versicolor
6.1,3,4.6,1.4,versicolor
5.8,2.6,4,1.2,versicolor
5,2.3,3.3,1,versicolor
5.6,2.7,4.2,1.3,versicolor
5.7,3,4.2,1.2,versicolor
5.7,2.9,4.2,1.3,versicolor
6.2,2.9,4.3,1.3,versicolor
5.1,2.5,3,1.1,versicolor
5.7,2.8,4.1,1.3,versicolor
6.3,3.3,6,2.5,virginica
5.8,2.7,5.1,1.9,virginica
7.1,3,5.9,2.1,virginica
5.8,2.8,5.1,2.4,virginica
6.4,3.2,5.3,2.3,virginica
6.5,3,5.5,1.8,virginica
7.7,3.8,6.7,2.2,virginica
7.7,2.6,6.9,2.3,virginica
6,2.2,5,1.5,virginica
6.9,3.2,5.7,2.3,virginica
5.6,2.8,4.9,2,virginica
7.7,2.8,6.7,2,virginica
6.3,2.7,4.9,1.8,virginica
6.7,3.3,5.7,2.1,virginica
7.2,3.2,6,1.8,virginica
6.2,2.8,4.8,1.8,virginica
6.1,3,4.9,1.8,virginica
6.4,2.8,5.6,2.1,virginica
7.2,3,5.8,1.6,virginica
7.4,2.8,6.1,1.9,virginica
7.9,3.8,6.4,2,virginica
6.4,2.8,5.6,2.2,virginica
6.3,2.8,5.1,1.5,virginica
6.1,2.6,5.6,1.4,virginica
7.7,3,6.1,2.3,virginica
6.3,3.4,5.6,2.4,virginica
6.4,3.1,5.5,1.8,virginica
</pre>