Ant: Исключение в потоке «main» java.lang.NoClassDefFoundError: org / apache / tools / ant / launch / Launcher

Мне нужен запрос для возврата большого количества случайных строк из довольно большой таблицы. Это то, что я придумал. Сначала введите максимальный идентификатор записи:

SELECT MAX(id) FROM table_name;

Затем замените это значение на:

SELECT * FROM table_name WHERE id > FLOOR(RAND() * max) LIMIT n;

Где max - максимальный идентификатор записи в таблице, а n - количество строк вы хотите в своем результирующем наборе. Предполагается, что в идентификаторе записи нет пробелов, хотя я сомневаюсь, что это повлияет на результат, если они были (хотя и не пробовали). Я также создал эту хранимую процедуру более универсальной; введите имя таблицы и количество возвращаемых строк. Я запускаю MySQL 5.5.38 в Windows 2008, 32 ГБ, dual 3GHz E5450, а на таблице с 17,361,264 строк он довольно устойчив в ~ .03 сек / ~ 11 сек, чтобы вернуть 1 000 000 строк. (время от MySQL Workbench 6.1; вы также можете использовать CEIL вместо FLOOR во втором выборе в зависимости от ваших предпочтений)

DELIMITER $$

USE [schema name] $$

DROP PROCEDURE IF EXISTS `random_rows` $$

CREATE PROCEDURE `random_rows`(IN tab_name VARCHAR(64), IN num_rows INT)
BEGIN

SET @t = CONCAT('SET @max=(SELECT MAX(id) FROM ',tab_name,')');
PREPARE stmt FROM @t;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;

SET @t = CONCAT(
    'SELECT * FROM ',
    tab_name,
    ' WHERE id>FLOOR(RAND()*@max) LIMIT ',
    num_rows);

PREPARE stmt FROM @t;
EXECUTE stmt;
DEALLOCATE PREPARE stmt;
END
$$

, затем

CALL [schema name].random_rows([table name], n);
13
задан Cœur 5 March 2017 в 14:13
поделиться