forked from D-Net/dnet-hadoop
Merge branch 'beta' into dedup_whitelist
This commit is contained in:
commit
474117c2e8
|
@ -12,10 +12,6 @@ import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.hadoop.io.Text;
|
import org.apache.hadoop.io.Text;
|
||||||
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
|
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
||||||
import org.apache.http.client.methods.HttpGet;
|
|
||||||
import org.apache.http.impl.client.CloseableHttpClient;
|
|
||||||
import org.apache.http.impl.client.HttpClients;
|
|
||||||
import org.apache.spark.SparkConf;
|
import org.apache.spark.SparkConf;
|
||||||
import org.apache.spark.api.java.JavaPairRDD;
|
import org.apache.spark.api.java.JavaPairRDD;
|
||||||
import org.apache.spark.api.java.JavaSparkContext;
|
import org.apache.spark.api.java.JavaSparkContext;
|
||||||
|
@ -25,8 +21,12 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import eu.dnetlib.dhp.application.ArgumentApplicationParser;
|
import eu.dnetlib.dhp.application.ArgumentApplicationParser;
|
||||||
|
import eu.dnetlib.dhp.common.collection.CollectorException;
|
||||||
|
import eu.dnetlib.dhp.common.collection.HttpClientParams;
|
||||||
import eu.dnetlib.doiboost.orcid.model.DownloadedRecordData;
|
import eu.dnetlib.doiboost.orcid.model.DownloadedRecordData;
|
||||||
|
import eu.dnetlib.doiboost.orcid.util.DownloadsReport;
|
||||||
import eu.dnetlib.doiboost.orcid.util.HDFSUtil;
|
import eu.dnetlib.doiboost.orcid.util.HDFSUtil;
|
||||||
|
import eu.dnetlib.doiboost.orcid.util.MultiAttemptsHttpConnector;
|
||||||
import scala.Tuple2;
|
import scala.Tuple2;
|
||||||
|
|
||||||
public class SparkDownloadOrcidAuthors {
|
public class SparkDownloadOrcidAuthors {
|
||||||
|
@ -72,16 +72,12 @@ public class SparkDownloadOrcidAuthors {
|
||||||
LongAccumulator parsedRecordsAcc = spark.sparkContext().longAccumulator("parsed_records");
|
LongAccumulator parsedRecordsAcc = spark.sparkContext().longAccumulator("parsed_records");
|
||||||
LongAccumulator modifiedRecordsAcc = spark.sparkContext().longAccumulator("to_download_records");
|
LongAccumulator modifiedRecordsAcc = spark.sparkContext().longAccumulator("to_download_records");
|
||||||
LongAccumulator downloadedRecordsAcc = spark.sparkContext().longAccumulator("downloaded_records");
|
LongAccumulator downloadedRecordsAcc = spark.sparkContext().longAccumulator("downloaded_records");
|
||||||
LongAccumulator errorHTTP403Acc = spark.sparkContext().longAccumulator("error_HTTP_403");
|
LongAccumulator errorsAcc = spark.sparkContext().longAccumulator("errors");
|
||||||
LongAccumulator errorHTTP404Acc = spark.sparkContext().longAccumulator("error_HTTP_404");
|
|
||||||
LongAccumulator errorHTTP409Acc = spark.sparkContext().longAccumulator("error_HTTP_409");
|
|
||||||
LongAccumulator errorHTTP503Acc = spark.sparkContext().longAccumulator("error_HTTP_503");
|
|
||||||
LongAccumulator errorHTTP525Acc = spark.sparkContext().longAccumulator("error_HTTP_525");
|
|
||||||
LongAccumulator errorHTTPGenericAcc = spark.sparkContext().longAccumulator("error_HTTP_Generic");
|
|
||||||
|
|
||||||
logger.info("Retrieving data from lamda sequence file");
|
String lambdaFilePath = workingPath + lambdaFileName;
|
||||||
|
logger.info("Retrieving data from lamda sequence file: " + lambdaFilePath);
|
||||||
JavaPairRDD<Text, Text> lamdaFileRDD = sc
|
JavaPairRDD<Text, Text> lamdaFileRDD = sc
|
||||||
.sequenceFile(workingPath + lambdaFileName, Text.class, Text.class);
|
.sequenceFile(lambdaFilePath, Text.class, Text.class);
|
||||||
final long lamdaFileRDDCount = lamdaFileRDD.count();
|
final long lamdaFileRDDCount = lamdaFileRDD.count();
|
||||||
logger.info("Data retrieved: {}", lamdaFileRDDCount);
|
logger.info("Data retrieved: {}", lamdaFileRDDCount);
|
||||||
|
|
||||||
|
@ -102,47 +98,44 @@ public class SparkDownloadOrcidAuthors {
|
||||||
final DownloadedRecordData downloaded = new DownloadedRecordData();
|
final DownloadedRecordData downloaded = new DownloadedRecordData();
|
||||||
downloaded.setOrcidId(orcidId);
|
downloaded.setOrcidId(orcidId);
|
||||||
downloaded.setLastModifiedDate(lastModifiedDate);
|
downloaded.setLastModifiedDate(lastModifiedDate);
|
||||||
CloseableHttpClient client = HttpClients.createDefault();
|
final HttpClientParams clientParams = new HttpClientParams();
|
||||||
HttpGet httpGet = new HttpGet("https://api.orcid.org/v3.0/" + orcidId + "/record");
|
MultiAttemptsHttpConnector httpConnector = new MultiAttemptsHttpConnector(clientParams);
|
||||||
httpGet.addHeader("Accept", "application/vnd.orcid+xml");
|
httpConnector.setAuthMethod(MultiAttemptsHttpConnector.BEARER);
|
||||||
httpGet.addHeader("Authorization", String.format("Bearer %s", token));
|
httpConnector.setAcceptHeaderValue("application/vnd.orcid+xml");
|
||||||
|
httpConnector.setAuthToken(token);
|
||||||
|
String apiUrl = "https://api.orcid.org/v3.0/" + orcidId + "/record";
|
||||||
|
DownloadsReport report = new DownloadsReport();
|
||||||
long startReq = System.currentTimeMillis();
|
long startReq = System.currentTimeMillis();
|
||||||
CloseableHttpResponse response = client.execute(httpGet);
|
boolean downloadCompleted = false;
|
||||||
|
String record = "";
|
||||||
|
try {
|
||||||
|
record = httpConnector.getInputSource(apiUrl, report);
|
||||||
|
downloadCompleted = true;
|
||||||
|
} catch (CollectorException ce) {
|
||||||
|
if (!report.isEmpty()) {
|
||||||
|
int errCode = report.keySet().stream().findFirst().get();
|
||||||
|
report.forEach((k, v) -> {
|
||||||
|
logger.error(k + " " + v);
|
||||||
|
});
|
||||||
|
downloaded.setStatusCode(errCode);
|
||||||
|
} else {
|
||||||
|
downloaded.setStatusCode(-4);
|
||||||
|
}
|
||||||
|
errorsAcc.add(1);
|
||||||
|
}
|
||||||
long endReq = System.currentTimeMillis();
|
long endReq = System.currentTimeMillis();
|
||||||
long reqTime = endReq - startReq;
|
long reqTime = endReq - startReq;
|
||||||
if (reqTime < 1000) {
|
if (reqTime < 1000) {
|
||||||
Thread.sleep(1000 - reqTime);
|
Thread.sleep(1000 - reqTime);
|
||||||
}
|
}
|
||||||
int statusCode = response.getStatusLine().getStatusCode();
|
if (downloadCompleted) {
|
||||||
downloaded.setStatusCode(statusCode);
|
downloaded.setStatusCode(200);
|
||||||
if (statusCode != 200) {
|
|
||||||
switch (statusCode) {
|
|
||||||
case 403:
|
|
||||||
errorHTTP403Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 404:
|
|
||||||
errorHTTP404Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 409:
|
|
||||||
errorHTTP409Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 503:
|
|
||||||
errorHTTP503Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 525:
|
|
||||||
errorHTTP525Acc.add(1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
errorHTTPGenericAcc.add(1);
|
|
||||||
}
|
|
||||||
return downloaded.toTuple2();
|
|
||||||
}
|
|
||||||
downloadedRecordsAcc.add(1);
|
downloadedRecordsAcc.add(1);
|
||||||
downloaded
|
downloaded
|
||||||
.setCompressedData(
|
.setCompressedData(
|
||||||
ArgumentApplicationParser
|
ArgumentApplicationParser
|
||||||
.compressArgument(IOUtils.toString(response.getEntity().getContent())));
|
.compressArgument(record));
|
||||||
client.close();
|
}
|
||||||
return downloaded.toTuple2();
|
return downloaded.toTuple2();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -153,26 +146,17 @@ public class SparkDownloadOrcidAuthors {
|
||||||
long authorsModifiedCount = authorsModifiedRDD.count();
|
long authorsModifiedCount = authorsModifiedRDD.count();
|
||||||
logger.info("Authors modified count: {}", authorsModifiedCount);
|
logger.info("Authors modified count: {}", authorsModifiedCount);
|
||||||
|
|
||||||
logger.info("Start downloading ...");
|
|
||||||
|
|
||||||
final JavaPairRDD<Text, Text> pairRDD = authorsModifiedRDD
|
final JavaPairRDD<Text, Text> pairRDD = authorsModifiedRDD
|
||||||
.repartition(100)
|
.repartition(100)
|
||||||
.map(downloadRecordFn)
|
.map(downloadRecordFn)
|
||||||
.mapToPair(t -> new Tuple2<>(new Text(t._1()), new Text(t._2())));
|
.mapToPair(t -> new Tuple2<>(new Text(t._1()), new Text(t._2())));
|
||||||
|
|
||||||
saveAsSequenceFile(workingPath, outputPath, sc, pairRDD);
|
saveAsSequenceFile(workingPath, outputPath, sc, pairRDD);
|
||||||
|
|
||||||
logger.info("parsedRecordsAcc: {}", parsedRecordsAcc.value());
|
logger.info("parsedRecordsAcc: {}", parsedRecordsAcc.value());
|
||||||
logger.info("modifiedRecordsAcc: {}", modifiedRecordsAcc.value());
|
logger.info("modifiedRecordsAcc: {}", modifiedRecordsAcc.value());
|
||||||
logger.info("downloadedRecordsAcc: {}", downloadedRecordsAcc.value());
|
logger.info("downloadedRecordsAcc: {}", downloadedRecordsAcc.value());
|
||||||
logger.info("errorHTTP403Acc: {}", errorHTTP403Acc.value());
|
logger.info("errorsAcc: {}", errorsAcc.value());
|
||||||
logger.info("errorHTTP404Acc: {}", errorHTTP404Acc.value());
|
|
||||||
logger.info("errorHTTP409Acc: {}", errorHTTP409Acc.value());
|
|
||||||
logger.info("errorHTTP503Acc: {}", errorHTTP503Acc.value());
|
|
||||||
logger.info("errorHTTP525Acc: {}", errorHTTP525Acc.value());
|
|
||||||
logger.info("errorHTTPGenericAcc: {}", errorHTTPGenericAcc.value());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
private static void saveAsSequenceFile(String workingPath, String outputPath, JavaSparkContext sc,
|
private static void saveAsSequenceFile(String workingPath, String outputPath, JavaSparkContext sc,
|
||||||
|
|
|
@ -11,10 +11,6 @@ import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.commons.lang3.StringUtils;
|
import org.apache.commons.lang3.StringUtils;
|
||||||
import org.apache.hadoop.io.Text;
|
import org.apache.hadoop.io.Text;
|
||||||
import org.apache.hadoop.io.compress.GzipCodec;
|
import org.apache.hadoop.io.compress.GzipCodec;
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
|
||||||
import org.apache.http.client.methods.HttpGet;
|
|
||||||
import org.apache.http.impl.client.CloseableHttpClient;
|
|
||||||
import org.apache.http.impl.client.HttpClients;
|
|
||||||
import org.apache.spark.SparkConf;
|
import org.apache.spark.SparkConf;
|
||||||
import org.apache.spark.api.java.JavaPairRDD;
|
import org.apache.spark.api.java.JavaPairRDD;
|
||||||
import org.apache.spark.api.java.JavaSparkContext;
|
import org.apache.spark.api.java.JavaSparkContext;
|
||||||
|
@ -28,8 +24,12 @@ import com.google.gson.JsonElement;
|
||||||
import com.google.gson.JsonParser;
|
import com.google.gson.JsonParser;
|
||||||
|
|
||||||
import eu.dnetlib.dhp.application.ArgumentApplicationParser;
|
import eu.dnetlib.dhp.application.ArgumentApplicationParser;
|
||||||
|
import eu.dnetlib.dhp.common.collection.CollectorException;
|
||||||
|
import eu.dnetlib.dhp.common.collection.HttpClientParams;
|
||||||
import eu.dnetlib.doiboost.orcid.model.DownloadedRecordData;
|
import eu.dnetlib.doiboost.orcid.model.DownloadedRecordData;
|
||||||
|
import eu.dnetlib.doiboost.orcid.util.DownloadsReport;
|
||||||
import eu.dnetlib.doiboost.orcid.util.HDFSUtil;
|
import eu.dnetlib.doiboost.orcid.util.HDFSUtil;
|
||||||
|
import eu.dnetlib.doiboost.orcid.util.MultiAttemptsHttpConnector;
|
||||||
import eu.dnetlib.doiboost.orcid.xml.XMLRecordParser;
|
import eu.dnetlib.doiboost.orcid.xml.XMLRecordParser;
|
||||||
import scala.Tuple2;
|
import scala.Tuple2;
|
||||||
|
|
||||||
|
@ -90,12 +90,7 @@ public class SparkDownloadOrcidWorks {
|
||||||
.sparkContext()
|
.sparkContext()
|
||||||
.longAccumulator("error_parsing_xml_found");
|
.longAccumulator("error_parsing_xml_found");
|
||||||
LongAccumulator downloadedRecordsAcc = spark.sparkContext().longAccumulator("downloaded_records");
|
LongAccumulator downloadedRecordsAcc = spark.sparkContext().longAccumulator("downloaded_records");
|
||||||
LongAccumulator errorHTTP403Acc = spark.sparkContext().longAccumulator("error_HTTP_403");
|
LongAccumulator errorsAcc = spark.sparkContext().longAccumulator("errors");
|
||||||
LongAccumulator errorHTTP404Acc = spark.sparkContext().longAccumulator("error_HTTP_404");
|
|
||||||
LongAccumulator errorHTTP409Acc = spark.sparkContext().longAccumulator("error_HTTP_409");
|
|
||||||
LongAccumulator errorHTTP503Acc = spark.sparkContext().longAccumulator("error_HTTP_503");
|
|
||||||
LongAccumulator errorHTTP525Acc = spark.sparkContext().longAccumulator("error_HTTP_525");
|
|
||||||
LongAccumulator errorHTTPGenericAcc = spark.sparkContext().longAccumulator("error_HTTP_Generic");
|
|
||||||
|
|
||||||
JavaPairRDD<Text, Text> updatedAuthorsRDD = sc
|
JavaPairRDD<Text, Text> updatedAuthorsRDD = sc
|
||||||
.sequenceFile(workingPath + "downloads/updated_authors/*", Text.class, Text.class);
|
.sequenceFile(workingPath + "downloads/updated_authors/*", Text.class, Text.class);
|
||||||
|
@ -149,51 +144,44 @@ public class SparkDownloadOrcidWorks {
|
||||||
final DownloadedRecordData downloaded = new DownloadedRecordData();
|
final DownloadedRecordData downloaded = new DownloadedRecordData();
|
||||||
downloaded.setOrcidId(orcidId);
|
downloaded.setOrcidId(orcidId);
|
||||||
downloaded.setLastModifiedDate(lastUpdateValue);
|
downloaded.setLastModifiedDate(lastUpdateValue);
|
||||||
CloseableHttpClient client = HttpClients.createDefault();
|
final HttpClientParams clientParams = new HttpClientParams();
|
||||||
HttpGet httpGet = new HttpGet("https://api.orcid.org/v3.0/" + relativeWorkUrl);
|
MultiAttemptsHttpConnector httpConnector = new MultiAttemptsHttpConnector(clientParams);
|
||||||
httpGet.addHeader("Accept", "application/vnd.orcid+xml");
|
httpConnector.setAuthMethod(MultiAttemptsHttpConnector.BEARER);
|
||||||
httpGet.addHeader("Authorization", String.format("Bearer %s", token));
|
httpConnector.setAcceptHeaderValue("application/vnd.orcid+xml");
|
||||||
|
httpConnector.setAuthToken(token);
|
||||||
|
String apiUrl = "https://api.orcid.org/v3.0/" + relativeWorkUrl;
|
||||||
|
DownloadsReport report = new DownloadsReport();
|
||||||
long startReq = System.currentTimeMillis();
|
long startReq = System.currentTimeMillis();
|
||||||
CloseableHttpResponse response = client.execute(httpGet);
|
boolean downloadCompleted = false;
|
||||||
|
String record = "";
|
||||||
|
try {
|
||||||
|
record = httpConnector.getInputSource(apiUrl, report);
|
||||||
|
downloadCompleted = true;
|
||||||
|
} catch (CollectorException ce) {
|
||||||
|
if (!report.isEmpty()) {
|
||||||
|
int errCode = report.keySet().stream().findFirst().get();
|
||||||
|
report.forEach((k, v) -> {
|
||||||
|
logger.error(k + " " + v);
|
||||||
|
});
|
||||||
|
downloaded.setStatusCode(errCode);
|
||||||
|
} else {
|
||||||
|
downloaded.setStatusCode(-4);
|
||||||
|
}
|
||||||
|
errorsAcc.add(1);
|
||||||
|
}
|
||||||
long endReq = System.currentTimeMillis();
|
long endReq = System.currentTimeMillis();
|
||||||
long reqTime = endReq - startReq;
|
long reqTime = endReq - startReq;
|
||||||
if (reqTime < 1000) {
|
if (reqTime < 1000) {
|
||||||
Thread.sleep(1000 - reqTime);
|
Thread.sleep(1000 - reqTime);
|
||||||
}
|
}
|
||||||
int statusCode = response.getStatusLine().getStatusCode();
|
if (downloadCompleted) {
|
||||||
downloaded.setStatusCode(statusCode);
|
downloaded.setStatusCode(200);
|
||||||
if (statusCode != 200) {
|
|
||||||
switch (statusCode) {
|
|
||||||
case 403:
|
|
||||||
errorHTTP403Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 404:
|
|
||||||
errorHTTP404Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 409:
|
|
||||||
errorHTTP409Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 503:
|
|
||||||
errorHTTP503Acc.add(1);
|
|
||||||
break;
|
|
||||||
case 525:
|
|
||||||
errorHTTP525Acc.add(1);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
errorHTTPGenericAcc.add(1);
|
|
||||||
logger
|
|
||||||
.info(
|
|
||||||
"Downloading {} status code: {}", orcidId,
|
|
||||||
response.getStatusLine().getStatusCode());
|
|
||||||
}
|
|
||||||
return downloaded.toTuple2();
|
|
||||||
}
|
|
||||||
downloadedRecordsAcc.add(1);
|
downloadedRecordsAcc.add(1);
|
||||||
downloaded
|
downloaded
|
||||||
.setCompressedData(
|
.setCompressedData(
|
||||||
ArgumentApplicationParser
|
ArgumentApplicationParser
|
||||||
.compressArgument(IOUtils.toString(response.getEntity().getContent())));
|
.compressArgument(record));
|
||||||
client.close();
|
}
|
||||||
return downloaded.toTuple2();
|
return downloaded.toTuple2();
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -214,11 +202,7 @@ public class SparkDownloadOrcidWorks {
|
||||||
logger.info("errorLoadingXMLFoundAcc: {}", errorLoadingXMLFoundAcc.value());
|
logger.info("errorLoadingXMLFoundAcc: {}", errorLoadingXMLFoundAcc.value());
|
||||||
logger.info("errorParsingXMLFoundAcc: {}", errorParsingXMLFoundAcc.value());
|
logger.info("errorParsingXMLFoundAcc: {}", errorParsingXMLFoundAcc.value());
|
||||||
logger.info("downloadedRecordsAcc: {}", downloadedRecordsAcc.value());
|
logger.info("downloadedRecordsAcc: {}", downloadedRecordsAcc.value());
|
||||||
logger.info("errorHTTP403Acc: {}", errorHTTP403Acc.value());
|
logger.info("errorsAcc: {}", errorsAcc.value());
|
||||||
logger.info("errorHTTP409Acc: {}", errorHTTP409Acc.value());
|
|
||||||
logger.info("errorHTTP503Acc: {}", errorHTTP503Acc.value());
|
|
||||||
logger.info("errorHTTP525Acc: {}", errorHTTP525Acc.value());
|
|
||||||
logger.info("errorHTTPGenericAcc: {}", errorHTTPGenericAcc.value());
|
|
||||||
});
|
});
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,10 @@
|
||||||
|
|
||||||
|
package eu.dnetlib.doiboost.orcid.util;
|
||||||
|
|
||||||
|
import java.util.LinkedHashMap;
|
||||||
|
|
||||||
|
public class DownloadsReport extends LinkedHashMap<Integer, String> {
|
||||||
|
|
||||||
|
public DownloadsReport() {
|
||||||
|
}
|
||||||
|
}
|
|
@ -0,0 +1,272 @@
|
||||||
|
|
||||||
|
package eu.dnetlib.doiboost.orcid.util;
|
||||||
|
|
||||||
|
import static eu.dnetlib.dhp.utils.DHPUtils.MAPPER;
|
||||||
|
|
||||||
|
import java.io.IOException;
|
||||||
|
import java.io.InputStream;
|
||||||
|
import java.net.*;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import org.apache.commons.io.IOUtils;
|
||||||
|
import org.apache.commons.lang3.math.NumberUtils;
|
||||||
|
import org.apache.http.HttpHeaders;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import eu.dnetlib.dhp.common.collection.CollectorException;
|
||||||
|
import eu.dnetlib.dhp.common.collection.HttpClientParams;
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Derived from eu.dnetlib.dhp.common.collection.HttpConnector2 with custom report and Bearer auth
|
||||||
|
*
|
||||||
|
* @author enrico
|
||||||
|
*/
|
||||||
|
public class MultiAttemptsHttpConnector {
|
||||||
|
|
||||||
|
private static final Logger log = LoggerFactory.getLogger(MultiAttemptsHttpConnector.class);
|
||||||
|
|
||||||
|
private HttpClientParams clientParams;
|
||||||
|
|
||||||
|
private String responseType = null;
|
||||||
|
|
||||||
|
private static final String userAgent = "Mozilla/5.0 (compatible; OAI; +http://www.openaire.eu)";
|
||||||
|
|
||||||
|
private String authToken = "";
|
||||||
|
private String acceptHeaderValue = "";
|
||||||
|
private String authMethod = "";
|
||||||
|
public final static String BEARER = "BEARER";
|
||||||
|
|
||||||
|
public MultiAttemptsHttpConnector() {
|
||||||
|
this(new HttpClientParams());
|
||||||
|
}
|
||||||
|
|
||||||
|
public MultiAttemptsHttpConnector(HttpClientParams clientParams) {
|
||||||
|
this.clientParams = clientParams;
|
||||||
|
CookieHandler.setDefault(new CookieManager(null, CookiePolicy.ACCEPT_ALL));
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Given the URL returns the content via HTTP GET
|
||||||
|
*
|
||||||
|
* @param requestUrl the URL
|
||||||
|
* @param report the list of errors
|
||||||
|
* @return the content of the downloaded resource
|
||||||
|
* @throws CollectorException when retrying more than maxNumberOfRetry times
|
||||||
|
*/
|
||||||
|
public String getInputSource(final String requestUrl, DownloadsReport report)
|
||||||
|
throws CollectorException {
|
||||||
|
return attemptDownloadAsString(requestUrl, 1, report);
|
||||||
|
}
|
||||||
|
|
||||||
|
private String attemptDownloadAsString(final String requestUrl, final int retryNumber,
|
||||||
|
final DownloadsReport report) throws CollectorException {
|
||||||
|
|
||||||
|
try (InputStream s = attemptDownload(requestUrl, retryNumber, report)) {
|
||||||
|
return IOUtils.toString(s);
|
||||||
|
} catch (IOException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
throw new CollectorException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private InputStream attemptDownload(final String requestUrl, final int retryNumber,
|
||||||
|
final DownloadsReport report) throws CollectorException, IOException {
|
||||||
|
|
||||||
|
if (retryNumber > getClientParams().getMaxNumberOfRetry()) {
|
||||||
|
final String msg = String
|
||||||
|
.format(
|
||||||
|
"Max number of retries (%s/%s) exceeded, failing.",
|
||||||
|
retryNumber, getClientParams().getMaxNumberOfRetry());
|
||||||
|
log.error(msg);
|
||||||
|
throw new CollectorException(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
log.info("Request attempt {} [{}]", retryNumber, requestUrl);
|
||||||
|
|
||||||
|
InputStream input = null;
|
||||||
|
|
||||||
|
try {
|
||||||
|
if (getClientParams().getRequestDelay() > 0) {
|
||||||
|
backoffAndSleep(getClientParams().getRequestDelay());
|
||||||
|
}
|
||||||
|
final HttpURLConnection urlConn = (HttpURLConnection) new URL(requestUrl).openConnection();
|
||||||
|
urlConn.setInstanceFollowRedirects(false);
|
||||||
|
urlConn.setReadTimeout(getClientParams().getReadTimeOut() * 1000);
|
||||||
|
urlConn.setConnectTimeout(getClientParams().getConnectTimeOut() * 1000);
|
||||||
|
urlConn.addRequestProperty(HttpHeaders.USER_AGENT, userAgent);
|
||||||
|
|
||||||
|
if (!getAcceptHeaderValue().isEmpty()) {
|
||||||
|
urlConn.addRequestProperty(HttpHeaders.ACCEPT, getAcceptHeaderValue());
|
||||||
|
}
|
||||||
|
if (!getAuthToken().isEmpty() && getAuthMethod().equals(BEARER)) {
|
||||||
|
urlConn.addRequestProperty(HttpHeaders.AUTHORIZATION, String.format("Bearer %s", getAuthToken()));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (log.isDebugEnabled()) {
|
||||||
|
logHeaderFields(urlConn);
|
||||||
|
}
|
||||||
|
|
||||||
|
int retryAfter = obtainRetryAfter(urlConn.getHeaderFields());
|
||||||
|
if (is2xx(urlConn.getResponseCode())) {
|
||||||
|
input = urlConn.getInputStream();
|
||||||
|
responseType = urlConn.getContentType();
|
||||||
|
return input;
|
||||||
|
}
|
||||||
|
if (is3xx(urlConn.getResponseCode())) {
|
||||||
|
// REDIRECTS
|
||||||
|
final String newUrl = obtainNewLocation(urlConn.getHeaderFields());
|
||||||
|
log.info("The requested url has been moved to {}", newUrl);
|
||||||
|
report
|
||||||
|
.put(
|
||||||
|
urlConn.getResponseCode(),
|
||||||
|
String.format("Moved to: %s", newUrl));
|
||||||
|
urlConn.disconnect();
|
||||||
|
if (retryAfter > 0) {
|
||||||
|
backoffAndSleep(retryAfter);
|
||||||
|
}
|
||||||
|
return attemptDownload(newUrl, retryNumber + 1, report);
|
||||||
|
}
|
||||||
|
if (is4xx(urlConn.getResponseCode()) || is5xx(urlConn.getResponseCode())) {
|
||||||
|
switch (urlConn.getResponseCode()) {
|
||||||
|
case HttpURLConnection.HTTP_NOT_FOUND:
|
||||||
|
case HttpURLConnection.HTTP_BAD_GATEWAY:
|
||||||
|
case HttpURLConnection.HTTP_UNAVAILABLE:
|
||||||
|
case HttpURLConnection.HTTP_GATEWAY_TIMEOUT:
|
||||||
|
if (retryAfter > 0) {
|
||||||
|
log
|
||||||
|
.warn(
|
||||||
|
"{} - waiting and repeating request after suggested retry-after {} sec.",
|
||||||
|
requestUrl, retryAfter);
|
||||||
|
backoffAndSleep(retryAfter * 1000);
|
||||||
|
} else {
|
||||||
|
log
|
||||||
|
.warn(
|
||||||
|
"{} - waiting and repeating request after default delay of {} sec.",
|
||||||
|
requestUrl, getClientParams().getRetryDelay());
|
||||||
|
backoffAndSleep(retryNumber * getClientParams().getRetryDelay() * 1000);
|
||||||
|
}
|
||||||
|
report.put(urlConn.getResponseCode(), requestUrl);
|
||||||
|
urlConn.disconnect();
|
||||||
|
return attemptDownload(requestUrl, retryNumber + 1, report);
|
||||||
|
default:
|
||||||
|
report
|
||||||
|
.put(
|
||||||
|
urlConn.getResponseCode(),
|
||||||
|
String
|
||||||
|
.format(
|
||||||
|
"%s Error: %s", requestUrl, urlConn.getResponseMessage()));
|
||||||
|
throw new CollectorException(urlConn.getResponseCode() + " error " + report);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new CollectorException(
|
||||||
|
String
|
||||||
|
.format(
|
||||||
|
"Unexpected status code: %s errors: %s", urlConn.getResponseCode(),
|
||||||
|
MAPPER.writeValueAsString(report)));
|
||||||
|
} catch (MalformedURLException | UnknownHostException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
report.put(-2, e.getMessage());
|
||||||
|
throw new CollectorException(e.getMessage(), e);
|
||||||
|
} catch (SocketTimeoutException | SocketException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
report.put(-3, e.getMessage());
|
||||||
|
backoffAndSleep(getClientParams().getRetryDelay() * retryNumber * 1000);
|
||||||
|
return attemptDownload(requestUrl, retryNumber + 1, report);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void logHeaderFields(final HttpURLConnection urlConn) throws IOException {
|
||||||
|
log.debug("StatusCode: {}", urlConn.getResponseMessage());
|
||||||
|
|
||||||
|
for (Map.Entry<String, List<String>> e : urlConn.getHeaderFields().entrySet()) {
|
||||||
|
if (e.getKey() != null) {
|
||||||
|
for (String v : e.getValue()) {
|
||||||
|
log.debug(" key: {} - value: {}", e.getKey(), v);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void backoffAndSleep(int sleepTimeMs) throws CollectorException {
|
||||||
|
log.info("I'm going to sleep for {}ms", sleepTimeMs);
|
||||||
|
try {
|
||||||
|
Thread.sleep(sleepTimeMs);
|
||||||
|
} catch (InterruptedException e) {
|
||||||
|
log.error(e.getMessage(), e);
|
||||||
|
throw new CollectorException(e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private int obtainRetryAfter(final Map<String, List<String>> headerMap) {
|
||||||
|
for (String key : headerMap.keySet()) {
|
||||||
|
if ((key != null) && key.equalsIgnoreCase(HttpHeaders.RETRY_AFTER) && (!headerMap.get(key).isEmpty())
|
||||||
|
&& NumberUtils.isCreatable(headerMap.get(key).get(0))) {
|
||||||
|
return Integer.parseInt(headerMap.get(key).get(0)) + 10;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String obtainNewLocation(final Map<String, List<String>> headerMap) throws CollectorException {
|
||||||
|
for (String key : headerMap.keySet()) {
|
||||||
|
if ((key != null) && key.equalsIgnoreCase(HttpHeaders.LOCATION) && (headerMap.get(key).size() > 0)) {
|
||||||
|
return headerMap.get(key).get(0);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
throw new CollectorException("The requested url has been MOVED, but 'location' param is MISSING");
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean is2xx(final int statusCode) {
|
||||||
|
return statusCode >= 200 && statusCode <= 299;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean is4xx(final int statusCode) {
|
||||||
|
return statusCode >= 400 && statusCode <= 499;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean is3xx(final int statusCode) {
|
||||||
|
return statusCode >= 300 && statusCode <= 399;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean is5xx(final int statusCode) {
|
||||||
|
return statusCode >= 500 && statusCode <= 599;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getResponseType() {
|
||||||
|
return responseType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public HttpClientParams getClientParams() {
|
||||||
|
return clientParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setClientParams(HttpClientParams clientParams) {
|
||||||
|
this.clientParams = clientParams;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthToken(String authToken) {
|
||||||
|
this.authToken = authToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
private String getAuthToken() {
|
||||||
|
return authToken;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAcceptHeaderValue() {
|
||||||
|
return acceptHeaderValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAcceptHeaderValue(String acceptHeaderValue) {
|
||||||
|
this.acceptHeaderValue = acceptHeaderValue;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getAuthMethod() {
|
||||||
|
return authMethod;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAuthMethod(String authMethod) {
|
||||||
|
this.authMethod = authMethod;
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,13 +1,11 @@
|
||||||
|
|
||||||
package eu.dnetlib.doiboost.orcid;
|
package eu.dnetlib.doiboost.orcid;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
import static org.junit.jupiter.api.Assertions.*;
|
||||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.nio.file.Files;
|
import java.nio.file.Files;
|
||||||
import java.nio.file.Path;
|
import java.nio.file.Path;
|
||||||
import java.nio.file.Paths;
|
|
||||||
import java.nio.file.StandardOpenOption;
|
import java.nio.file.StandardOpenOption;
|
||||||
import java.text.ParseException;
|
import java.text.ParseException;
|
||||||
import java.text.SimpleDateFormat;
|
import java.text.SimpleDateFormat;
|
||||||
|
@ -17,7 +15,6 @@ import org.apache.commons.compress.archivers.tar.TarArchiveEntry;
|
||||||
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
|
import org.apache.commons.compress.archivers.tar.TarArchiveInputStream;
|
||||||
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
|
import org.apache.commons.compress.compressors.gzip.GzipCompressorInputStream;
|
||||||
import org.apache.commons.compress.utils.Lists;
|
import org.apache.commons.compress.utils.Lists;
|
||||||
import org.apache.commons.io.FileUtils;
|
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.apache.http.client.methods.CloseableHttpResponse;
|
import org.apache.http.client.methods.CloseableHttpResponse;
|
||||||
import org.apache.http.client.methods.HttpGet;
|
import org.apache.http.client.methods.HttpGet;
|
||||||
|
@ -28,8 +25,11 @@ import org.junit.jupiter.api.Disabled;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
|
|
||||||
import eu.dnetlib.dhp.application.ArgumentApplicationParser;
|
import eu.dnetlib.dhp.application.ArgumentApplicationParser;
|
||||||
|
import eu.dnetlib.dhp.common.collection.CollectorException;
|
||||||
|
import eu.dnetlib.dhp.common.collection.HttpClientParams;
|
||||||
import eu.dnetlib.dhp.schema.orcid.AuthorData;
|
import eu.dnetlib.dhp.schema.orcid.AuthorData;
|
||||||
import eu.dnetlib.doiboost.orcid.xml.XMLRecordParserTest;
|
import eu.dnetlib.doiboost.orcid.util.DownloadsReport;
|
||||||
|
import eu.dnetlib.doiboost.orcid.util.MultiAttemptsHttpConnector;
|
||||||
import jdk.nashorn.internal.ir.annotations.Ignore;
|
import jdk.nashorn.internal.ir.annotations.Ignore;
|
||||||
|
|
||||||
public class OrcidClientTest {
|
public class OrcidClientTest {
|
||||||
|
@ -49,7 +49,7 @@ public class OrcidClientTest {
|
||||||
|
|
||||||
@BeforeAll
|
@BeforeAll
|
||||||
private static void setUp() throws IOException {
|
private static void setUp() throws IOException {
|
||||||
testPath = Files.createTempDirectory(XMLRecordParserTest.class.getName());
|
testPath = Files.createTempDirectory(OrcidClientTest.class.getName());
|
||||||
System.out.println("using test path: " + testPath);
|
System.out.println("using test path: " + testPath);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -349,4 +349,84 @@ public class OrcidClientTest {
|
||||||
final String work = ArgumentApplicationParser.decompressValue(base64CompressedWork);
|
final String work = ArgumentApplicationParser.decompressValue(base64CompressedWork);
|
||||||
logToFile(testPath, "\n\nwork updated \n\n" + work);
|
logToFile(testPath, "\n\nwork updated \n\n" + work);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void downloadUnknownHostExceptionTest() throws Exception {
|
||||||
|
logToFile(testPath, "downloadUnknownHostExceptionTest");
|
||||||
|
final String orcid = "0000-0001-7291-3210";
|
||||||
|
final HttpClientParams clientParams = new HttpClientParams();
|
||||||
|
clientParams.setMaxNumberOfRetry(2);
|
||||||
|
MultiAttemptsHttpConnector httpConnector = new MultiAttemptsHttpConnector(clientParams);
|
||||||
|
httpConnector.setAuthMethod(MultiAttemptsHttpConnector.BEARER);
|
||||||
|
httpConnector.setAcceptHeaderValue("application/vnd.orcid+xml");
|
||||||
|
httpConnector.setAuthToken("78fdb232-7105-4086-8570-e153f4198e3d");
|
||||||
|
String wrongApiUrl = "https://api.orcid_UNKNOWN.org/v3.0/" + orcid + "/" + REQUEST_TYPE_RECORD;
|
||||||
|
String url = "UNKNOWN";
|
||||||
|
DownloadsReport report = new DownloadsReport();
|
||||||
|
try {
|
||||||
|
httpConnector.getInputSource(wrongApiUrl, report);
|
||||||
|
} catch (CollectorException ce) {
|
||||||
|
logToFile(testPath, "CollectorException downloading: " + ce.getMessage());
|
||||||
|
} catch (Throwable t) {
|
||||||
|
logToFile(testPath, "Throwable downloading: " + t.getMessage());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void downloadAttemptSuccessTest() throws Exception {
|
||||||
|
logToFile(testPath, "downloadAttemptSuccessTest");
|
||||||
|
final String orcid = "0000-0001-7291-3210";
|
||||||
|
final HttpClientParams clientParams = new HttpClientParams();
|
||||||
|
clientParams.setMaxNumberOfRetry(2);
|
||||||
|
MultiAttemptsHttpConnector httpConnector = new MultiAttemptsHttpConnector(clientParams);
|
||||||
|
httpConnector.setAuthMethod(MultiAttemptsHttpConnector.BEARER);
|
||||||
|
httpConnector.setAcceptHeaderValue("application/vnd.orcid+xml");
|
||||||
|
httpConnector.setAuthToken("78fdb232-7105-4086-8570-e153f4198e3d");
|
||||||
|
String apiUrl = "https://api.orcid.org/v3.0/" + orcid + "/" + REQUEST_TYPE_RECORD;
|
||||||
|
String url = "UNKNOWN";
|
||||||
|
DownloadsReport report = new DownloadsReport();
|
||||||
|
String record = httpConnector.getInputSource(apiUrl, report);
|
||||||
|
logToFile(testPath, "Downloaded at first attempt record: " + record);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
void downloadAttemptNotFoundTest() throws Exception {
|
||||||
|
logToFile(testPath, "downloadAttemptNotFoundTest");
|
||||||
|
final HttpClientParams clientParams = new HttpClientParams();
|
||||||
|
clientParams.setMaxNumberOfRetry(2);
|
||||||
|
MultiAttemptsHttpConnector httpConnector = new MultiAttemptsHttpConnector(clientParams);
|
||||||
|
httpConnector.setAuthMethod(MultiAttemptsHttpConnector.BEARER);
|
||||||
|
httpConnector.setAcceptHeaderValue("application/vnd.orcid+xml");
|
||||||
|
httpConnector.setAuthToken("78fdb232-7105-4086-8570-e153f4198e3d");
|
||||||
|
String apiUrl = "https://api.orcid.org/v3.0/NOTFOUND/" + REQUEST_TYPE_RECORD;
|
||||||
|
DownloadsReport report = new DownloadsReport();
|
||||||
|
try {
|
||||||
|
httpConnector.getInputSource(apiUrl, report);
|
||||||
|
} catch (CollectorException ce) {
|
||||||
|
|
||||||
|
}
|
||||||
|
report.forEach((k, v) -> {
|
||||||
|
try {
|
||||||
|
logToFile(testPath, k + " " + v);
|
||||||
|
} catch (IOException e) {
|
||||||
|
e.printStackTrace();
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
void testDownloadedAuthor() throws Exception {
|
||||||
|
final String base64CompressedWork = "H4sIAAAAAAAAAI2Yy26jMBSG932KiD0hIe1MiwiVZjGLkWbX2XRHsFOsgs3YJmnefszFFy4+mUhtVPz9P/gcH/vQ9PWrrjYXzAVh9Bjst7tgg2nBEKEfx+DP28/wOdgImVOUV4ziY3DDInjNHlKOC8ZRMnxtmlyWxyDaqU+ofg7h/uX7IYwfn+Ngo25ARUKoxJzm1TEopWySKLper1vGC4LU74+IikgTWoFRW+SyfyyfxCBag4iQhBawyoGMDjdqJrnECJAZRquYLDEPaV5jv8oyWlXj+qTiXZLGr7KMiQbnjAOR6IY1W7C6hgIwjGt6SKGfHsY13ajHYipLIcIyJ5Xw6+akdvjEtyt4wxEwM6+VGph5N2zYr2ENhQRhKsmZYChmS1j7nFs6VIBPOwImKhyfMVeFg6GAWEjrcoQ4FoBmBGwVXYhagGHDBIEX+ZzUDiqyn35VN6rJUpUJ4zc/PAI2T03FbrUKJZQszWjV3zavVOjvVfoE01qB+YUUQPGNwHTt3luxJjdqh1AxJFBKLWOrSeCcF13RtxxYtlPOPqH6m+MLwVfoMQ2kdae2ArLajc6fTxkI1nIoegs0yB426pMO+0fSw07xDKMu0XKSde5C2VvrlVMijRzFwqY7XTJI1QMLWcmEzMxtDdxfHiYSgTNJnYJ1K9y5k0tUrMgrnGGaRiuXxxuClulYUbr0nBvpkYLjvgTCGsuSoex3f1CEvRPHKI184NJKtKeaiO7cD5E61bJ4F+9DFd7d01u8Tw6H5BBvvz8f3q3nXLGIeJULGdaqeVBBRK7rS7h/fNvvk/gpedxt4923dxP7Fc3KtKuc1BhlkrfYmeN4dcmrhmbw60+HmWw2CKgbTuqc32CXKTTmeTWT6bDBjPsQ0DTpnchdaYO0ayQ2FyLIiVREqs25aU8VKYLRbK0BsyZuqvr1MU2Sm/rDdhe/2CRN6FU/b+oBVyj1zqRtC5F8kAumfTclsl+s7EoNQu64nfOaVLeezX60Z3XCULLi6GI2IZGTEeey7fec9lBAuXawIHKcpifE7GABHWfoxLVfpUNPBXoMbZWrHFsR3bPAk9J9i2sw9nW6AQT1mpk++7JhW+v44Hmt8PomJqfD13jRnvFOSxCKtu6qHoyBbQ7cMFo750UEfGaXm6bEeplXIXj2hvL6mA7tzvIwmM9pbJFBG834POZdLGi2gH2u9u0K9HMwn5PTioFWLufzmrS4oNuU9Pkt2rf/2jMs7fMdm2rQTTM+j+49AzToAVuXYA1mD2k0+XdE9vAP+JYR5NcQAAA=";
|
||||||
|
final String work = ArgumentApplicationParser.decompressValue(base64CompressedWork);
|
||||||
|
logToFile(testPath, "\n\ndownloaded author \n\n" + work);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
@Ignore
|
||||||
|
void testDownloadedWork() throws Exception {
|
||||||
|
final String base64CompressedWork = "H4sIAAAAAAAAANVa63LiOBb+z1Oo+LVbhbkGAlTCLE1Id9IhTQV6unr/CVvB2tiWR5Khmal5rX2BfbE9ki3b3Jzt6Y13h6pQSPrOXTo6knL10zffQxvCBWXBdbVVb1YRCWzm0GB9Xf28vLX6VSQkDhzssYBcV3dEVH8aVa62jL8M1RcKI2kBAYwNLnrtXrMPFCGW7nW10YSPBX8dq3XRb1swNGgomkaG3FBBV9SjcnddDaOVR+0qApUCMaSBJDzA3nXVlTIcNhrb7bbOuE0d+F43AtEwCENBnMjGUhtyjiSFGBqHCkkDu5gqB0rpSMgJsCJOAVmKMVRMuoRbAfbJeaoMY6h84q8gQi4Nz1NlmNQbnDNe4Ak1bLA28/0iB8TjBg1GMV5gdzxu0CGoxSBKlkMkpp44T3eINBxeyG5bKDABpJb7QF1guRpOsd/iOWRRhwSSPlNS5LNjsOHzHAXxmjlHmwBSr3DyTDgsNVLkkAxk6LDjcCIKaBJAtoo2FCagFTJBiyf5IdJwUAv2PJUaNUgXlgnju/PgBJDFKfTYzgdXFgXLYAzVLxH2wPWvrfQ9mKEVhG+oXbD4EsD+3H1txqaxgQwBPqRFIc0w2WoSBHNbLfqIF0zbfVymIbQ52VCyLVIzBRm6VeQVRFWNHuoHDASLeJH3jqDVUQXB5yrOH0ObE5UNLQe+R+1mu2U1u1Z7sGy2hq3esN2tt5oXf79qnELv8fGwkJYPmxSswD1uA6vVXrY7w+5g2G3WuxedjNsJmj2escJx33G/ZXsU5iAs/AyRR0WcjpRXBLglc0lM1BjP59bX1qw9Hn/+dH87/dy9vBikeinKkyzVHjoqJNWIk7QuE3KU6pES6O7MwsarJh44QW1KowcWOCxAC9tlzEPsGX3YrYGQICgS0JKzENach2bEoTYNyKEQzaJyQnzSqesKSaV3IhRx92L8tLAm7GerjbZUujSwlFnIobqKkTuth+Q4ED4Vqqypp5JyfK8ah5Ji0f8AZVSGT2TZVGXfBLw/liOyqdRpJqfyXr8ldyEZrehKkm8Jr/2hc3Qb7EVk9DfMJbU98pu3k+6aETXXBebCZpt23tBaBUfSZRxdo98eYmgNfRxrh3zAnldDM/37FvZ+IiWtoQfddgiaEGBIDGCG7btA7jgBP9svAK2h90l4yYqIGop5jgMHXA4J0NB9ksR+YTX0qFtfqACO01jGjDHFPx552AW2W0P3uvGROk4NLfTvCeNS8X9MaDg1rL9Qz6PYh7En3f4ZNmKS6nUfQYFmE6PYe05IYBqPFGaq5wHlYpaoDbYqxokVK+JBerz51z+BIzc+SfSdTHVrTiSYtZzGFNOdGrr5ohsLF2+NUguqppkDoua6/S6yXwAYu44pM+/HiZ1BwEDWMqYbC5fjZ+MEBwMjb4PRLdTFYWrUwiUhJH/H+G3pMl/7fjqJhTGwSwU5lnfLsVDmxIPvmRetbJeCOsvfaxWXbXWxLVziqNky51BLW1OP2JKzgNoASSa7Gk1WAfrLI9mirzBBIUD1r/W/AgrMla7CjEMOzYBJolo30/mnxd0SzadPt5+eZtMb9O7rEN1wNINgEA8Ha+IxNMdrHLCQRR4TFRCudnmB7m6GqD0YDCqW+lQqlfnndw93iw/TJ/RwN5k+TqZDNJkAQyUvUlWvktjrdgbQEeI1EapN8Grd7MOeYJlfajSxWVOMfcIhVQXgfcFsqhcceobVA/U3GjsbDCYrjVSKSz0wHo8Xym6dArRvvjsbAfUGouFr8s5lG9o72DVVSy1saDqMqlarWW+12r2GiIXXMzuAU6AQcLLqWf3mZRf6iOlsNQdda9BudhQnvNNdPWN8XA7BgU5G2k3pLADA75XD3BSnn3y+3M90SbZWGczkxiRVmfSaJrd0V8u0yG3CeYRyht7O07Ste45weuqNmhcpLO44woEPRq1eilLN/f3ntEqGPFfzi2PmudHTO3EOEKf60LdTyUeDr7KIIzKfTfqtdr896JxklQtbES/IQD7UyL+SZIJSXYhLHkHZ9oqEjPR1MRzWu550cDYdCeI9n+S4hzouUU76+UeCQJ0fjkKn0+v3m703i0Eh/z97BCDH/XAAziTIt4rH94j7s4dHbSY/HJ90e3qriBQL+MMxCGETs9j/QxiSQ5PaS63/QsZqdS8vOxdvtj7Oc//fL4dTI2LvDAfVA6erSDKe3+cPxw70j4c5HHZlfLT9iAEZYKjZkxOYKZxymJy659l/t+QZllC5bvVJrzShD5GN0/NkiaZyqNcJh0NrdngtTfp7wviaHB+SS1Ng7O+Sk3h5HodT4S8RyY78pUmGM6eEg1l8tVCa1KnvY/SgrzDKsxRLF46j+uahNKH3BE6lsIb1lUxpUhdS3WUE+u6nPP/qiyAsklumMhMz9SBNqeus0oQ+QXqwIa7m3qy87IhXnBLPI8kVXXlZMaASm5vAEqWuKYkvHMtbPdiPiIdm6dVmeVMZjX+lfnKDWmaRAT7ev6ctTfhEF3RoWnJeXlKfSXcHcsf69rk0wTd4Qx30RV9yl5et2Ipwqe/SS5MJXiU8vbIv2b/qZaC8PZ65AUwj9QJR3vx1mQ9b7VPy1FFebnSpWq7xi0qJuwA+fLYpL7rwJdLXobcSa97kM4Cl35f3YXmofp0+8R9gBc/XeXL9Vn38pH7mLTs27z9T8ky1n7ynlZ0I4le78rYzl6t/woG5krwQlpcRcLDD2UPkH5F73C9G5tFKfY0q/wa1TIHI0CgAAA==";
|
||||||
|
final String work = ArgumentApplicationParser.decompressValue(base64CompressedWork);
|
||||||
|
logToFile(testPath, "\n\ndownloaded work \n\n" + work);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -76,6 +76,18 @@ public class IndexRecordTransformerTest {
|
||||||
testRecordTransformation(record);
|
testRecordTransformation(record);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testForEOSCFutureDataTransferPilot() throws IOException, TransformerException {
|
||||||
|
final String record = IOUtils.toString(getClass().getResourceAsStream("eosc-future/data-transfer-pilot.xml"));
|
||||||
|
testRecordTransformation(record);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testForEOSCFutureTraining() throws IOException, TransformerException {
|
||||||
|
final String record = IOUtils.toString(getClass().getResourceAsStream("eosc-future/training-notebooks-seadatanet.xml"));
|
||||||
|
testRecordTransformation(record);
|
||||||
|
}
|
||||||
|
|
||||||
private void testRecordTransformation(final String record) throws IOException, TransformerException {
|
private void testRecordTransformation(final String record) throws IOException, TransformerException {
|
||||||
final String fields = IOUtils.toString(getClass().getResourceAsStream("fields.xml"));
|
final String fields = IOUtils.toString(getClass().getResourceAsStream("fields.xml"));
|
||||||
final String xslt = IOUtils.toString(getClass().getResourceAsStream("layoutToRecordTransformer.xsl"));
|
final String xslt = IOUtils.toString(getClass().getResourceAsStream("layoutToRecordTransformer.xsl"));
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
<record>
|
||||||
|
<result xmlns:dri="http://www.driver-repository.eu/namespace/dri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<header>
|
||||||
|
<dri:objIdentifier>r37b0ad08687::dec0d8520e726f2adda9a51280ac7299</dri:objIdentifier>
|
||||||
|
<dri:dateOfCollection>2021-09-22T08:53:16Z</dri:dateOfCollection>
|
||||||
|
<dri:status>under curation</dri:status>
|
||||||
|
<counters />
|
||||||
|
</header>
|
||||||
|
<metadata>
|
||||||
|
<oaf:entity xmlns:oaf="http://namespace.openaire.eu/oaf"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://namespace.openaire.eu/oaf http://namespace.openaire.eu/oaf http://www.openaire.eu/schema/0.2/oaf-0.2.xsd">
|
||||||
|
<oaf:result>
|
||||||
|
<title classid="main title" classname="main title" schemeid="dnet:dataCite_title" schemename="dnet:dataCite_title">EGI-Foundation/data-transfer-pilot: Include libraries in environment.yml</title>
|
||||||
|
<creator rank="1" name="" surname="">Giuseppe La Rocca</creator>
|
||||||
|
<creator rank="2" name="" surname="">Enol Fernández</creator>
|
||||||
|
<creator rank="3" name="" surname="">Andrea Manzi</creator>
|
||||||
|
<dateofacceptance />
|
||||||
|
<resulttype classid="software" classname="software" schemeid="dnet:result_typologies" schemename="dnet:result_typologies" />
|
||||||
|
<language classid="" classname="" schemeid="dnet:languages" schemename="dnet:languages" />
|
||||||
|
<description>This notebook is used to demonstrate how a scientist from one of the PaNOSC RIs can use the resources provided by EGI to perform analysis on the data sets obtained during an expirement.</description>
|
||||||
|
<country classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<subject classid="keyword" classname="keyword" schemeid="dnet:subject_classification_typologies" schemename="dnet:subject_classification_typologies">EOSC Jupyter Notebook</subject>
|
||||||
|
<relevantdate classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<publisher>Zenodo</publisher>
|
||||||
|
<embargoenddate />
|
||||||
|
<journal issn="" eissn="" lissn="" ep="" iss="" sp="" vol="" />
|
||||||
|
<source />
|
||||||
|
<fulltext />
|
||||||
|
<format />
|
||||||
|
<storagedate />
|
||||||
|
<resourcetype classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<device />
|
||||||
|
<size />
|
||||||
|
<version />
|
||||||
|
<lastmetadataupdate />
|
||||||
|
<metadataversionnumber />
|
||||||
|
<documentationUrl />
|
||||||
|
<codeRepositoryUrl />
|
||||||
|
<programmingLanguage classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<contactperson />
|
||||||
|
<contactgroup />
|
||||||
|
<tool />
|
||||||
|
<originalId>oai:zenodo.org:4218562</originalId>
|
||||||
|
<collectedfrom name="Zenodo" id="re3data_____::7b0ad08687b2c960d5aeef06f811d5e6" />
|
||||||
|
<pid classid="oai" classname="Open Archives Initiative" schemeid="dnet:pid_types" schemename="dnet:pid_types">oai:zenodo.org:4218562</pid>
|
||||||
|
<pid classid="doi" classname="Digital Object Identifier" schemeid="dnet:pid_types" schemename="dnet:pid_types">10.5281/zenodo.4218562</pid>
|
||||||
|
<bestaccessright classid="OPEN" classname="Open Access" schemeid="dnet:access_modes" schemename="dnet:access_modes" />
|
||||||
|
<datainfo>
|
||||||
|
<inferred>false</inferred>
|
||||||
|
<deletedbyinference>false</deletedbyinference>
|
||||||
|
<trust>0.9</trust>
|
||||||
|
<inferenceprovenance />
|
||||||
|
<provenanceaction classid="user:insert" classname="user:insert" schemeid="dnet:provenanceActions" schemename="dnet:provenanceActions" />
|
||||||
|
</datainfo>
|
||||||
|
<rels></rels>
|
||||||
|
<children>
|
||||||
|
<instance id="r37b0ad08687::dec0d8520e726f2adda9a51280ac7299">
|
||||||
|
<instancetype classid="0029" classname="Software" schemeid="dnet:publication_resource" schemename="dnet:publication_resource" />
|
||||||
|
<collectedfrom name="Zenodo" id="re3data_____::7b0ad08687b2c960d5aeef06f811d5e6" />
|
||||||
|
<hostedby name="Zenodo" id="re3data_____::7b0ad08687b2c960d5aeef06f811d5e6" />
|
||||||
|
<accessright classid="OPEN" classname="Open Access" schemeid="dnet:access_modes" schemename="dnet:access_modes" />
|
||||||
|
<dateofacceptance />
|
||||||
|
<webresource>
|
||||||
|
<url>https://zenodo.org/record/4218562</url>
|
||||||
|
</webresource>
|
||||||
|
</instance>
|
||||||
|
</children>
|
||||||
|
</oaf:result>
|
||||||
|
</oaf:entity>
|
||||||
|
</metadata>
|
||||||
|
</result>
|
||||||
|
</record>
|
|
@ -0,0 +1,71 @@
|
||||||
|
<record>
|
||||||
|
<result xmlns:dri="http://www.driver-repository.eu/namespace/dri" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
|
||||||
|
<header>
|
||||||
|
<dri:objIdentifier>r37b0ad08687::eb430fb7438e1533ba95d6aa50a477eb</dri:objIdentifier>
|
||||||
|
<dri:dateOfCollection>2021-09-22T08:53:13Z</dri:dateOfCollection>
|
||||||
|
<dri:status>under curation</dri:status>
|
||||||
|
<counters />
|
||||||
|
</header>
|
||||||
|
<metadata>
|
||||||
|
<oaf:entity xmlns:oaf="http://namespace.openaire.eu/oaf"
|
||||||
|
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://namespace.openaire.eu/oaf http://namespace.openaire.eu/oaf http://www.openaire.eu/schema/0.2/oaf-0.2.xsd">
|
||||||
|
|
||||||
|
<oaf:result>
|
||||||
|
<title classid="main title" classname="main title" schemeid="dnet:dataCite_title" schemename="dnet:dataCite_title">EGI-Foundation/training-notebooks-seadatanet: Version 0.4</title>
|
||||||
|
<creator rank="1" name="" surname="">Enol Fernández</creator>
|
||||||
|
<dateofacceptance />
|
||||||
|
<resulttype classid="software" classname="software" schemeid="dnet:result_typologies" schemename="dnet:result_typologies" />
|
||||||
|
<language classid="" classname="" schemeid="dnet:languages" schemename="dnet:languages" />
|
||||||
|
<description>A sample notebook using SeaDataNet data to plot a map that shows surface temperature of Black Sea, Arctic Sea and Baltic Sea. The data is available at EGI DataHub with PID http://hdl.handle.net/21.T15999/qVk6JWQ (run at EGI Notebooks service for easy access to data).This release updates the PID for the data.</description>
|
||||||
|
<country classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<subject classid="keyword" classname="keyword" schemeid="dnet:subject_classification_typologies" schemename="dnet:subject_classification_typologies">EOSC Jupyter Notebook</subject>
|
||||||
|
<relevantdate classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<publisher>Zenodo</publisher>
|
||||||
|
<embargoenddate />
|
||||||
|
<journal issn="" eissn="" lissn="" ep="" iss="" sp="" vol="" />
|
||||||
|
<source />
|
||||||
|
<fulltext />
|
||||||
|
<format />
|
||||||
|
<storagedate />
|
||||||
|
<resourcetype classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<device />
|
||||||
|
<size />
|
||||||
|
<version />
|
||||||
|
<lastmetadataupdate />
|
||||||
|
<metadataversionnumber />
|
||||||
|
<documentationUrl />
|
||||||
|
<codeRepositoryUrl />
|
||||||
|
<programmingLanguage classid="" classname="" schemeid="" schemename="" />
|
||||||
|
<contactperson />
|
||||||
|
<contactgroup />
|
||||||
|
<tool />
|
||||||
|
<originalId>oai:zenodo.org:3561323</originalId>
|
||||||
|
<collectedfrom name="Zenodo" id="re3data_____::7b0ad08687b2c960d5aeef06f811d5e6" />
|
||||||
|
<pid classid="oai" classname="Open Archives Initiative" schemeid="dnet:pid_types" schemename="dnet:pid_types">oai:zenodo.org:3561323</pid>
|
||||||
|
<pid classid="doi" classname="Digital Object Identifier" schemeid="dnet:pid_types" schemename="dnet:pid_types">10.5281/zenodo.3561323</pid>
|
||||||
|
<bestaccessright classid="OPEN" classname="Open Access" schemeid="dnet:access_modes" schemename="dnet:access_modes" />
|
||||||
|
<datainfo>
|
||||||
|
<inferred>false</inferred>
|
||||||
|
<deletedbyinference>false</deletedbyinference>
|
||||||
|
<trust>0.9</trust>
|
||||||
|
<inferenceprovenance />
|
||||||
|
<provenanceaction classid="user:insert" classname="user:insert" schemeid="dnet:provenanceActions" schemename="dnet:provenanceActions" />
|
||||||
|
</datainfo>
|
||||||
|
<rels></rels>
|
||||||
|
<children>
|
||||||
|
<instance id="r37b0ad08687::eb430fb7438e1533ba95d6aa50a477eb">
|
||||||
|
<instancetype classid="0029" classname="Software" schemeid="dnet:publication_resource" schemename="dnet:publication_resource" />
|
||||||
|
<collectedfrom name="Zenodo" id="re3data_____::7b0ad08687b2c960d5aeef06f811d5e6" />
|
||||||
|
<hostedby name="Zenodo" id="re3data_____::7b0ad08687b2c960d5aeef06f811d5e6" />
|
||||||
|
<accessright classid="OPEN" classname="Open Access" schemeid="dnet:access_modes" schemename="dnet:access_modes" />
|
||||||
|
<dateofacceptance />
|
||||||
|
<webresource>
|
||||||
|
<url>https://zenodo.org/record/3561323</url>
|
||||||
|
</webresource>
|
||||||
|
</instance>
|
||||||
|
</children>
|
||||||
|
</oaf:result>
|
||||||
|
</oaf:entity>
|
||||||
|
</metadata>
|
||||||
|
</result>
|
||||||
|
</record>
|
|
@ -15,7 +15,13 @@
|
||||||
<FIELD indexable="true" multivalued="false" name="datasourcecompatibilityid" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/openairecompatibility/@classid"/>
|
<FIELD indexable="true" multivalued="false" name="datasourcecompatibilityid" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/openairecompatibility/@classid"/>
|
||||||
<FIELD indexable="true" multivalued="false" name="datasourcecompatibilityname" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/openairecompatibility/@classname"/>
|
<FIELD indexable="true" multivalued="false" name="datasourcecompatibilityname" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/openairecompatibility/@classname"/>
|
||||||
<FIELD indexable="true" multivalued="true" name="datasourcesubject" result="false" stat="false" type="ngramtext" xpath="//*[local-name()='entity']/*[local-name()='datasource']/subjects"/>
|
<FIELD indexable="true" multivalued="true" name="datasourcesubject" result="false" stat="false" type="ngramtext" xpath="//*[local-name()='entity']/*[local-name()='datasource']/subjects"/>
|
||||||
<FIELD indexable="true" name="versioning" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/versioning"/><!-- ORGANIZATION FIELDS -->
|
<FIELD indexable="true" name="versioning" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/versioning"/>
|
||||||
|
<!-- datasource fields for EOSC -->
|
||||||
|
<FIELD indexable="true" name="datasourcejurisdiction" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/jurisdiction"/>
|
||||||
|
<FIELD indexable="true" name="datasourcethematic" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/thematic"/>
|
||||||
|
<FIELD indexable="true" name="datasourceknowledge_graph" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/knowledgegraph"/>
|
||||||
|
<FIELD indexable="true" name="datasourcecontentpolicy" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='datasource']/contentpolicy"/>
|
||||||
|
<!-- ORGANIZATION FIELDS -->
|
||||||
<FIELD indexable="true" name="organizationlegalshortname" result="false" stat="false" type="ngramtext" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='organization']//legalshortname)"/>
|
<FIELD indexable="true" name="organizationlegalshortname" result="false" stat="false" type="ngramtext" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='organization']//legalshortname)"/>
|
||||||
<FIELD indexable="true" name="organizationlegalname" result="false" stat="false" type="ngramtext" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='organization']//legalname)"/>
|
<FIELD indexable="true" name="organizationlegalname" result="false" stat="false" type="ngramtext" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='organization']//legalname)"/>
|
||||||
<FIELD indexable="true" name="organizationalternativenames" result="false" stat="false" type="ngramtext" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='organization']//alternativeNames)"/>
|
<FIELD indexable="true" name="organizationalternativenames" result="false" stat="false" type="ngramtext" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='organization']//alternativeNames)"/>
|
||||||
|
@ -28,7 +34,8 @@
|
||||||
<FIELD indexable="true" name="organizationecenterprise" result="false" stat="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/ecenterprise"/>
|
<FIELD indexable="true" name="organizationecenterprise" result="false" stat="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/ecenterprise"/>
|
||||||
<FIELD indexable="true" name="organizationecsmevalidated" result="false" stat="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/ecsmevalidated"/>
|
<FIELD indexable="true" name="organizationecsmevalidated" result="false" stat="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/ecsmevalidated"/>
|
||||||
<FIELD indexable="true" name="organizationecnutscode" result="false" stat="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/ecnutscode"/>
|
<FIELD indexable="true" name="organizationecnutscode" result="false" stat="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/ecnutscode"/>
|
||||||
<FIELD indexable="true" multivalued="false" name="organizationcountryname" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/country/@classname"/><!-- PROJECT FIELDS -->
|
<FIELD indexable="true" multivalued="false" name="organizationcountryname" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='organization']/country/@classname"/>
|
||||||
|
<!-- PROJECT FIELDS -->
|
||||||
<FIELD indexable="true" name="projectcode" result="false" stat="false" type="ngramtext" xpath="//*[local-name()='entity']/*[local-name()='project']/code"/>
|
<FIELD indexable="true" name="projectcode" result="false" stat="false" type="ngramtext" xpath="//*[local-name()='entity']/*[local-name()='project']/code"/>
|
||||||
<FIELD indexable="true" name="projectcode_nt" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='project']/code"/>
|
<FIELD indexable="true" name="projectcode_nt" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']/*[local-name()='project']/code"/>
|
||||||
<FIELD indexable="true" name="projectacronym" result="false" stat="false" type="ngramtext" xpath="//*[local-name()='entity']/*[local-name()='project']/acronym"/>
|
<FIELD indexable="true" name="projectacronym" result="false" stat="false" type="ngramtext" xpath="//*[local-name()='entity']/*[local-name()='project']/acronym"/>
|
||||||
|
@ -79,6 +86,7 @@
|
||||||
<FIELD indexable="true" multivalued="true" name="resultauthor_nt" result="false" stat="false" type="string_ci" xpath="//*[local-name()='entity']/*[local-name()='result']/creator"/>
|
<FIELD indexable="true" multivalued="true" name="resultauthor_nt" result="false" stat="false" type="string_ci" xpath="//*[local-name()='entity']/*[local-name()='result']/creator"/>
|
||||||
<FIELD indexable="true" multivalued="true" name="authorid" result="false" stat="false" type="string_ci" xpath="//*[local-name()='entity']/*[local-name()='result']/creator/@*[local-name() != 'rank' and local-name() != 'name' and local-name() != 'surname']"/>
|
<FIELD indexable="true" multivalued="true" name="authorid" result="false" stat="false" type="string_ci" xpath="//*[local-name()='entity']/*[local-name()='result']/creator/@*[local-name() != 'rank' and local-name() != 'name' and local-name() != 'surname']"/>
|
||||||
<FIELD indexable="true" multivalued="true" name="authoridtype" result="false" stat="false" type="string_ci" xpath="//*[local-name()='entity']/*[local-name()='result']/creator/@*[local-name() != 'rank' and local-name() != 'name' and local-name() != 'surname']/local-name()"/>
|
<FIELD indexable="true" multivalued="true" name="authoridtype" result="false" stat="false" type="string_ci" xpath="//*[local-name()='entity']/*[local-name()='result']/creator/@*[local-name() != 'rank' and local-name() != 'name' and local-name() != 'surname']/local-name()"/>
|
||||||
|
<FIELD indexable="true" multivalued="true" name="orcidtypevalue" result="false" stat="false" type="string_ci" value="string-join((./@*[local-name() = 'orcid' or local-name() = 'orcid_pending'], ./@*[local-name() = 'orcid' or local-name() = 'orcid_pending']/local-name()), '||' )" xpath="//*[local-name()='entity']/*[local-name()='result']/creator"/>
|
||||||
<FIELD indexable="true" name="resulthostingdatasource" result="false" stat="false" tokenizable="false" value="distinct-values(concat(./@id, '||', ./@name))" xpath="//*[local-name()='entity']/*[local-name()='result']/children/instance/*[local-name()='hostedby']"/>
|
<FIELD indexable="true" name="resulthostingdatasource" result="false" stat="false" tokenizable="false" value="distinct-values(concat(./@id, '||', ./@name))" xpath="//*[local-name()='entity']/*[local-name()='result']/children/instance/*[local-name()='hostedby']"/>
|
||||||
<FIELD indexable="true" name="resulthostingdatasourceid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='result']/children/instance/*[local-name()='hostedby']/@id)"/>
|
<FIELD indexable="true" name="resulthostingdatasourceid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='result']/children/instance/*[local-name()='hostedby']/@id)"/>
|
||||||
<FIELD indexable="true" name="resulthostingdatasourcename" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='result']/children/instance/*[local-name()='hostedby']/@name)"/>
|
<FIELD indexable="true" name="resulthostingdatasourcename" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*[local-name()='result']/children/instance/*[local-name()='hostedby']/@name)"/>
|
||||||
|
@ -105,7 +113,7 @@
|
||||||
<FIELD indexable="true" name="relorganizationname" result="false" stat="false" xpath="distinct-values(//*[local-name()='entity']/*//rel[./to/@type='organization']/legalname)"/>
|
<FIELD indexable="true" name="relorganizationname" result="false" stat="false" xpath="distinct-values(//*[local-name()='entity']/*//rel[./to/@type='organization']/legalname)"/>
|
||||||
<FIELD indexable="true" name="relorganizationshortname" result="false" stat="false" xpath="distinct-values(//*[local-name()='entity']/*//rel[./to/@type='organization']/legalshortname)"/>
|
<FIELD indexable="true" name="relorganizationshortname" result="false" stat="false" xpath="distinct-values(//*[local-name()='entity']/*//rel[./to/@type='organization']/legalshortname)"/>
|
||||||
<FIELD indexable="true" name="relresultid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*//rel/to[@type='result'])"/>
|
<FIELD indexable="true" name="relresultid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*//rel/to[@type='result'])"/>
|
||||||
<FIELD indexable="true" name="relresulttype" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*//rel/to/@type)"/>
|
<FIELD indexable="true" name="relresulttype" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*//rel/resulttype/@classid)"/>
|
||||||
<FIELD indexable="true" name="relclass" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*//rel/to/@class)"/>
|
<FIELD indexable="true" name="relclass" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*//rel/to/@class)"/>
|
||||||
<FIELD indexable="true" name="relfundinglevel0_id" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']//rel/funding/funding_level_0"/>
|
<FIELD indexable="true" name="relfundinglevel0_id" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']//rel/funding/funding_level_0"/>
|
||||||
<FIELD indexable="true" name="relfundinglevel0_name" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']//rel/funding/funding_level_0/@name/string()"/>
|
<FIELD indexable="true" name="relfundinglevel0_name" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']//rel/funding/funding_level_0/@name/string()"/>
|
||||||
|
@ -130,7 +138,7 @@
|
||||||
<FIELD indexable="true" name="collectedfromdatasourceid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/*[local-name()='collectedfrom']/@id | //*[local-name()='entity']/*//*[local-name() = 'instance']/*[local-name()='collectedfrom']/@id)"/>
|
<FIELD indexable="true" name="collectedfromdatasourceid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/*[local-name()='collectedfrom']/@id | //*[local-name()='entity']/*//*[local-name() = 'instance']/*[local-name()='collectedfrom']/@id)"/>
|
||||||
<FIELD indexable="true" name="collectedfromname" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/*[local-name()='collectedfrom']/@name | //*[local-name()='entity']/*//*[local-name() = 'instance']/*[local-name()='collectedfrom']/@name)"/>
|
<FIELD indexable="true" name="collectedfromname" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/*[local-name()='collectedfrom']/@name | //*[local-name()='entity']/*//*[local-name() = 'instance']/*[local-name()='collectedfrom']/@name)"/>
|
||||||
<FIELD indexable="true" name="originalid" result="false" stat="false" tokenizable="false" type="string_ci" xpath="//*[local-name()='entity']/*/*[local-name()='originalId']"/>
|
<FIELD indexable="true" name="originalid" result="false" stat="false" tokenizable="false" type="string_ci" xpath="//*[local-name()='entity']/*/*[local-name()='originalId']"/>
|
||||||
<FIELD indexable="true" name="pid" result="false" stat="false" tokenizable="false" type="string_ci" xpath="//*[local-name()='entity']/*/pid/text()"/>
|
<FIELD indexable="true" name="pid" result="false" stat="false" tokenizable="false" type="string_ci" xpath="distinct-values(//*[local-name()='entity']/*/pid/text()|//*[local-name()='instance']/*[local-name()='alternateidentifier']/text())"/>
|
||||||
<FIELD indexable="true" name="pidclassid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/pid/@classid)"/>
|
<FIELD indexable="true" name="pidclassid" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/pid/@classid)"/>
|
||||||
<FIELD indexable="true" name="pidclassname" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/pid/@classname)"/>
|
<FIELD indexable="true" name="pidclassname" result="false" stat="false" tokenizable="false" xpath="distinct-values(//*[local-name()='entity']/*/pid/@classname)"/>
|
||||||
<FIELD indexable="true" name="inferred" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']//datainfo/inferred"/>
|
<FIELD indexable="true" name="inferred" result="false" stat="false" tokenizable="false" xpath="//*[local-name()='entity']//datainfo/inferred"/>
|
||||||
|
|
|
@ -16,7 +16,7 @@ curl -L ${CONTEXT_API}/contexts/?type=ri,community -H "accept: application/json"
|
||||||
cat contexts.csv | cut -d , -f1 | xargs -I {} curl -L ${CONTEXT_API}/context/{}/?all=true | /usr/local/sbin/jq -r '.[]|"\(.id|split(":")[0]),\(.id),\(.label)"' > categories.csv
|
cat contexts.csv | cut -d , -f1 | xargs -I {} curl -L ${CONTEXT_API}/context/{}/?all=true | /usr/local/sbin/jq -r '.[]|"\(.id|split(":")[0]),\(.id),\(.label)"' > categories.csv
|
||||||
cat categories.csv | cut -d , -f2 | sed 's/:/%3A/g'| xargs -I {} curl -L ${CONTEXT_API}/context/category/{}/?all=true | /usr/local/sbin/jq -r '.[]|"\(.id|split("::")[0])::\(.id|split("::")[1]),\(.id),\(.label)"' > concepts.csv
|
cat categories.csv | cut -d , -f2 | sed 's/:/%3A/g'| xargs -I {} curl -L ${CONTEXT_API}/context/category/{}/?all=true | /usr/local/sbin/jq -r '.[]|"\(.id|split("::")[0])::\(.id|split("::")[1]),\(.id),\(.label)"' > concepts.csv
|
||||||
cat contexts.csv | sed 's/^\(.*\),\(.*\)/\1,\1::other,\2/' >> categories.csv
|
cat contexts.csv | sed 's/^\(.*\),\(.*\)/\1,\1::other,\2/' >> categories.csv
|
||||||
cat categories.csv | grep -v ::other | sed 's/^.*,\(.*\),\(.*\)/\1,\1::other,\2/' >> concepts.csv
|
cat categories.csv | sed 's/^.*,\(.*\),\(.*\)/\1,\1::other,\2/' >> concepts.csv
|
||||||
|
|
||||||
echo "uploading context data to hdfs"
|
echo "uploading context data to hdfs"
|
||||||
hdfs dfs -mkdir ${TMP}
|
hdfs dfs -mkdir ${TMP}
|
||||||
|
|
|
@ -15,5 +15,5 @@ hdfs dfs -copyToLocal $SCRIPT_PATH
|
||||||
echo "Creating indicators"
|
echo "Creating indicators"
|
||||||
impala-shell -q "invalidate metadata"
|
impala-shell -q "invalidate metadata"
|
||||||
impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/^\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -c -f -
|
impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/^\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -c -f -
|
||||||
cat step16_7-createIndicatorsTables.sql | impala-shell -d $TARGET -f -
|
cat step16-createIndicatorsTables.sql | impala-shell -d $TARGET -f -
|
||||||
echo "Indicators created"
|
echo "Indicators created"
|
|
@ -9,16 +9,9 @@ fi
|
||||||
export SOURCE=$1
|
export SOURCE=$1
|
||||||
export TARGET=$2
|
export TARGET=$2
|
||||||
export SHADOW=$3
|
export SHADOW=$3
|
||||||
export SCRIPT_PATH=$4
|
|
||||||
|
|
||||||
echo "Getting file from " $4
|
impala-shell -q "invalidate metadata;"
|
||||||
hdfs dfs -copyToLocal $4
|
impala-shell -d ${TARGET} -q "show tables" --delimited | sed "s/\(.*\)/compute stats ${TARGET}.\1;/" | impala-shell -f -
|
||||||
|
|
||||||
echo "Creating observatory database"
|
|
||||||
impala-shell -q "drop database if exists ${TARGET} cascade"
|
|
||||||
impala-shell -q "create database if not exists ${TARGET}"
|
|
||||||
impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -f -
|
|
||||||
cat step21-createObservatoryDB.sql | sed s/SOURCE/$1/g | sed s/TARGET/$2/g1 | impala-shell -f -
|
|
||||||
echo "Impala shell finished"
|
echo "Impala shell finished"
|
||||||
|
|
||||||
echo "Updating shadow observatory database"
|
echo "Updating shadow observatory database"
|
|
@ -0,0 +1,16 @@
|
||||||
|
export PYTHON_EGG_CACHE=/home/$(whoami)/.python-eggs
|
||||||
|
export link_folder=/tmp/impala-shell-python-egg-cache-$(whoami)
|
||||||
|
if ! [ -L $link_folder ]
|
||||||
|
then
|
||||||
|
rm -Rf "$link_folder"
|
||||||
|
ln -sfn ${PYTHON_EGG_CACHE}${link_folder} ${link_folder}
|
||||||
|
fi
|
||||||
|
|
||||||
|
export SOURCE=$1
|
||||||
|
export TARGET=$2
|
||||||
|
export SHADOW=$3
|
||||||
|
|
||||||
|
echo "Creating observatory database"
|
||||||
|
impala-shell -q "drop database if exists ${TARGET} cascade"
|
||||||
|
impala-shell -q "create database if not exists ${TARGET}"
|
||||||
|
impala-shell -d ${SOURCE} -q "show tables" --delimited | sed "s/\(.*\)/create view ${TARGET}.\1 as select * from ${SOURCE}.\1;/" | impala-shell -f -
|
|
@ -23,6 +23,11 @@ CREATE OR REPLACE VIEW ${stats_db_name}.rndexpediture AS
|
||||||
SELECT *
|
SELECT *
|
||||||
FROM ${external_stats_db_name}.rndexpediture;
|
FROM ${external_stats_db_name}.rndexpediture;
|
||||||
|
|
||||||
|
CREATE OR REPLACE VIEW ${stats_db_name}.licenses_normalized AS
|
||||||
|
SELECT *
|
||||||
|
FROM ${external_stats_db_name}.licenses_normalized;
|
||||||
|
|
||||||
|
|
||||||
------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------
|
||||||
------------------------------------------------------------------------------------------------
|
------------------------------------------------------------------------------------------------
|
||||||
-- Creation date of the database
|
-- Creation date of the database
|
||||||
|
|
|
@ -1,62 +0,0 @@
|
||||||
----------------------------------------------------
|
|
||||||
-- Shortcuts for various definitions in stats db ---
|
|
||||||
----------------------------------------------------
|
|
||||||
|
|
||||||
-- Peer reviewed:
|
|
||||||
-- Results that have been collected from Crossref
|
|
||||||
create table ${stats_db_name}.result_peerreviewed as
|
|
||||||
with peer_reviewed as (
|
|
||||||
select distinct r.id as id
|
|
||||||
from ${stats_db_name}.result r
|
|
||||||
join ${stats_db_name}.result_sources rs on rs.id=r.id
|
|
||||||
join ${stats_db_name}.datasource d on d.id=rs.datasource
|
|
||||||
where d.name='Crossref')
|
|
||||||
select distinct peer_reviewed.id as id, true as peer_reviewed
|
|
||||||
from peer_reviewed
|
|
||||||
union all
|
|
||||||
select distinct r.id as id, false as peer_reviewed
|
|
||||||
from ${stats_db_name}.result r
|
|
||||||
left outer join peer_reviewed pr on pr.id=r.id
|
|
||||||
where pr.id is null;
|
|
||||||
|
|
||||||
-- Green OA:
|
|
||||||
-- OA results that are hosted by an Institutional repository and have NOT been harvested from a DOAJ journal.
|
|
||||||
create table ${stats_db_name}.result_greenoa as
|
|
||||||
with result_green as (
|
|
||||||
select distinct r.id as id
|
|
||||||
from ${stats_db_name}.result r
|
|
||||||
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
|
||||||
join ${stats_db_name}.datasource d on d.id=rd.datasource
|
|
||||||
left outer join (
|
|
||||||
select rd.id from ${stats_db_name}.result_datasources rd
|
|
||||||
join ${stats_db_name}.datasource d on rd.datasource=d.id
|
|
||||||
join ${stats_db_name}.datasource_sources sds on sds.id=d.id
|
|
||||||
join ${stats_db_name}.datasource sd on sd.id=sds.datasource
|
|
||||||
where sd.name='DOAJ-ARTICLES'
|
|
||||||
) as doaj on doaj.id=r.id
|
|
||||||
where r.bestlicence in ('Open Access', 'Open Source') and d.type='Institutional Repository' and doaj.id is null)
|
|
||||||
select distinct result_green.id, true as green
|
|
||||||
from result_green
|
|
||||||
union all
|
|
||||||
select distinct r.id as id, false as green
|
|
||||||
from ${stats_db_name}.result r
|
|
||||||
left outer join result_green rg on rg.id=r.id
|
|
||||||
where rg.id is null;
|
|
||||||
|
|
||||||
-- GOLD OA:
|
|
||||||
-- OA results that have been harvested from a DOAJ journal.
|
|
||||||
create table ${stats_db_name}.result_gold as
|
|
||||||
with result_gold as (
|
|
||||||
select distinct r.id as id
|
|
||||||
from ${stats_db_name}.result r
|
|
||||||
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
|
||||||
join ${stats_db_name}.datasource d on d.id=rd.datasource
|
|
||||||
join ${stats_db_name}.datasource_sources sds on sds.id=d.id
|
|
||||||
join ${stats_db_name}.datasource sd on sd.id=sds.datasource
|
|
||||||
where r.type='publication' and r.bestlicence='Open Access' and sd.name='DOAJ-Articles')
|
|
||||||
select distinct result_gold.id, true as gold
|
|
||||||
from result_gold
|
|
||||||
union all
|
|
||||||
select distinct r.id, false as gold
|
|
||||||
from ${stats_db_name}.result r
|
|
||||||
where r.id not in (select id from result_gold);
|
|
|
@ -0,0 +1,22 @@
|
||||||
|
----------------------------------------------------
|
||||||
|
-- Shortcuts for various definitions in stats db ---
|
||||||
|
----------------------------------------------------
|
||||||
|
|
||||||
|
-- Peer reviewed:
|
||||||
|
create table ${stats_db_name}.result_peerreviewed as
|
||||||
|
select r.id as id, case when doi.doi_from_crossref=1 and grey.grey_lit=0 then true else false end as peer_reviewed
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
left outer join ${stats_db_name}.indi_pub_doi_from_crossref doi on doi.id=r.id
|
||||||
|
left outer join ${stats_db_name}.indi_pub_grey_lit grey on grey.id=r.id;
|
||||||
|
|
||||||
|
-- Green OA:
|
||||||
|
create table ${stats_db_name}.result_greenoa as
|
||||||
|
select r.id, case when green.green_oa=1 then true else false end as green
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
left outer join ${stats_db_name}.indi_pub_green_oa green on green.id=r.id;
|
||||||
|
|
||||||
|
-- GOLD OA:
|
||||||
|
create table ${stats_db_name}.result_gold as
|
||||||
|
select r.id, case when gold.gold_oa=1 then true else false end as gold
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
left outer join ${stats_db_name}.indi_pub_gold_oa gold on gold.id=r.id;
|
|
@ -104,25 +104,42 @@ create table TARGET.project_results as select id as result, project as id from T
|
||||||
compute stats TARGET.project_results;
|
compute stats TARGET.project_results;
|
||||||
|
|
||||||
-- indicators
|
-- indicators
|
||||||
create table TARGET.indi_pub_green_oa as select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
create view TARGET.indi_dataset_avg_year_content_oa as select * from SOURCE.indi_dataset_avg_year_content_oa orig;
|
||||||
compute stats TARGET.indi_pub_green_oa;
|
create view TARGET.indi_dataset_avg_year_context_oa as select * from SOURCE.indi_dataset_avg_year_context_oa orig;
|
||||||
|
|
||||||
create table TARGET.indi_pub_grey_lit as select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
|
||||||
compute stats TARGET.indi_pub_grey_lit;
|
|
||||||
|
|
||||||
create table TARGET.indi_pub_doi_from_crossref as select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
|
||||||
compute stats TARGET.indi_pub_doi_from_crossref;
|
|
||||||
|
|
||||||
create table TARGET.indi_pub_gold_oa as select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
|
||||||
compute stats TARGET.indi_pub_gold_oa;
|
|
||||||
|
|
||||||
create view TARGET.indi_dataset_avg_year_country_oa as select * from SOURCE.indi_dataset_avg_year_country_oa orig;
|
create view TARGET.indi_dataset_avg_year_country_oa as select * from SOURCE.indi_dataset_avg_year_country_oa orig;
|
||||||
|
|
||||||
|
create view TARGET.indi_other_avg_year_content_oa as select * from SOURCE.indi_other_avg_year_content_oa orig;
|
||||||
|
create view TARGET.indi_other_avg_year_context_oa as select * from SOURCE.indi_other_avg_year_context_oa orig;
|
||||||
|
create view TARGET.indi_other_avg_year_country_oa as select * from SOURCE.indi_other_avg_year_country_oa orig;
|
||||||
|
|
||||||
create view TARGET.indi_project_datasets_count as select * from SOURCE.indi_project_datasets_count orig;
|
create view TARGET.indi_project_datasets_count as select * from SOURCE.indi_project_datasets_count orig;
|
||||||
create view TARGET.indi_project_otherresearch_count as select * from SOURCE.indi_project_otherresearch_count orig;
|
create view TARGET.indi_project_otherresearch_count as select * from SOURCE.indi_project_otherresearch_count orig;
|
||||||
create view TARGET.indi_project_pubs_count as select * from SOURCE.indi_project_pubs_count orig;
|
create view TARGET.indi_project_pubs_count as select * from SOURCE.indi_project_pubs_count orig;
|
||||||
create view TARGET.indi_project_software_count as select * from SOURCE.indi_project_software_count orig;
|
create view TARGET.indi_project_software_count as select * from SOURCE.indi_project_software_count orig;
|
||||||
|
|
||||||
|
create view TARGET.indi_pub_avg_year_content_oa as select * from SOURCE.indi_pub_avg_year_content_oa orig;
|
||||||
|
create view TARGET.indi_pub_avg_year_context_oa as select * from SOURCE.indi_pub_avg_year_context_oa orig;
|
||||||
create view TARGET.indi_pub_avg_year_country_oa as select * from SOURCE.indi_pub_avg_year_country_oa orig;
|
create view TARGET.indi_pub_avg_year_country_oa as select * from SOURCE.indi_pub_avg_year_country_oa orig;
|
||||||
|
|
||||||
|
create table TARGET.indi_pub_green_oa as select * from SOURCE.indi_pub_green_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_green_oa;
|
||||||
|
create table TARGET.indi_pub_grey_lit as select * from SOURCE.indi_pub_grey_lit orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_grey_lit;
|
||||||
|
create table TARGET.indi_pub_doi_from_crossref as select * from SOURCE.indi_pub_doi_from_crossref orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_doi_from_crossref;
|
||||||
|
create table TARGET.indi_pub_gold_oa as select * from SOURCE.indi_pub_gold_oa orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_gold_oa;
|
||||||
|
create table TARGET.indi_pub_has_abstract as select * from SOURCE.indi_pub_has_abstract orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_has_abstract;
|
||||||
|
create table TARGET.indi_pub_has_cc_licence as select * from SOURCE.indi_pub_has_cc_licence orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_has_cc_licence;
|
||||||
|
create table TARGET.indi_pub_has_cc_licence_url as select * from SOURCE.indi_pub_has_cc_licence_url orig where exists (select 1 from TARGET.result r where r.id=orig.id);
|
||||||
|
compute stats TARGET.indi_pub_has_cc_licence_url;
|
||||||
|
|
||||||
|
create view TARGET.indi_software_avg_year_content_oa as select * from SOURCE.indi_software_avg_year_content_oa orig;
|
||||||
|
create view TARGET.indi_software_avg_year_context_oa as select * from SOURCE.indi_software_avg_year_context_oa orig;
|
||||||
|
create view TARGET.indi_software_avg_year_country_oa as select * from SOURCE.indi_software_avg_year_country_oa orig;
|
||||||
|
|
||||||
--denorm
|
--denorm
|
||||||
alter table TARGET.result rename to TARGET.res_tmp;
|
alter table TARGET.result rename to TARGET.res_tmp;
|
||||||
|
|
||||||
|
|
|
@ -1,259 +1,561 @@
|
||||||
create table TARGET.result_affiliated_country stored as parquet as
|
create table ${observatory_db_name}.result_cc_licence stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select r.id, coalesce(rln.count, 0) > 0 as cc_licence
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
from ${stats_db_name}.result r
|
||||||
r.peer_reviewed, r.type, c.code as ccode, c.name as cname
|
left outer join (
|
||||||
from SOURCE.result r
|
select rl.id, sum(case when lower(rln.normalized) like 'cc-%' then 1 else 0 end) as count
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
from ${stats_db_name}.result_licenses rl
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
left outer join ${stats_db_name}.licenses_normalized rln on rl.type=rln.license
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
group by rl.id
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
) rln on rln.id=r.id;
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, c.code, c.name;
|
|
||||||
|
|
||||||
create table TARGET.result_affiliated_year stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa, r.peer_reviewed, r.type, r.year
|
count(distinct r.id) as total,
|
||||||
from SOURCE.result r
|
r.green,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
r.gold,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when pids.pid is not null then true else false end as pid,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.peer_reviewed,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, r.year;
|
rln.cc_licence,
|
||||||
|
r.abstract as abstract,
|
||||||
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_year_country stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_year stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, r.year, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
rln.cc_licence,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, r.year, c.code, c.name;
|
r.abstract as abstract,
|
||||||
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
r.year
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_datasource stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_year_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa, r.peer_reviewed, r.type, d.name as dname
|
count(distinct r.id) as total,
|
||||||
from SOURCE.result r
|
r.green,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
r.gold,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when pids.pid is not null then true else false end as pid,
|
||||||
left outer join SOURCE.result_datasources rd on rd.id=r.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
left outer join SOURCE.datasource d on d.id=rd.datasource
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.abstract as abstract,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, d.name;
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
r.year, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_datasource_country stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_datasource stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, d.name as dname, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
left outer join SOURCE.result_datasources rd on rd.id=r.id
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.datasource d on d.id=rd.datasource
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, d.name, c.code, c.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
d.name as dname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
left outer join ${stats_db_name}.datasource d on d.id=rd.datasource
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_organization stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_datasource_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, o.name as oname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
rln.cc_licence,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, o.name;
|
r.abstract as abstract,
|
||||||
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
d.name as dname, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
left outer join ${stats_db_name}.datasource d on d.id=rd.datasource
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_organization_country stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_organization stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, o.name as oname, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
rln.cc_licence,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, o.name, c.code, c.name;
|
r.abstract as abstract,
|
||||||
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
o.name as oname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_funder stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_organization_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa, r.peer_reviewed, r.type, p.funder as pfunder
|
count(distinct r.id) as total,
|
||||||
from SOURCE.result r
|
r.green,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
r.gold,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.result_projects rp on rp.id=r.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.project p on p.id=rp.project
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.abstract as abstract,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, p.funder;
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
o.name as oname, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_affiliated_funder_country stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_funder stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, p.funder as pfunder, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_organization ro on ro.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.organization o on o.id=ro.organization
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.result_projects rp on rp.id=r.id
|
r.peer_reviewed,
|
||||||
join SOURCE.project p on p.id=rp.project
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, p.funder, c.code, c.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
p.funder as pfunder
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
join ${stats_db_name}.result_projects rp on rp.id=r.id
|
||||||
|
join ${stats_db_name}.project p on p.id=rp.project
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder;
|
||||||
|
|
||||||
create table TARGET.result_deposited_country stored as parquet as
|
create table ${observatory_db_name}.result_affiliated_funder_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, c.code, c.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
p.funder as pfunder, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_organization ro on ro.id=r.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=ro.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
join ${stats_db_name}.result_projects rp on rp.id=r.id
|
||||||
|
join ${stats_db_name}.project p on p.id=rp.project
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_year stored as parquet as
|
create table ${observatory_db_name}.result_deposited_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa, r.peer_reviewed, r.type, r.year
|
count(distinct r.id) as total,
|
||||||
from SOURCE.result r
|
r.green,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
r.gold,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.abstract as abstract,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, r.year;
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_year_country stored as parquet as
|
create table ${observatory_db_name}.result_deposited_year stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, r.year, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, r.year, c.code, c.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
r.year
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year;
|
||||||
|
|
||||||
create table TARGET.result_deposited_datasource stored as parquet as
|
create table ${observatory_db_name}.result_deposited_year_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, d.name as dname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, d.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
r.year, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, r.year, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_datasource_country stored as parquet as
|
create table ${observatory_db_name}.result_deposited_datasource stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, d.name as dname, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, d.name, c.code, c.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
d.name as dname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_organization stored as parquet as
|
create table ${observatory_db_name}.result_deposited_datasource_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa, r.peer_reviewed, r.type, o.name as oname
|
count(distinct r.id) as total,
|
||||||
from SOURCE.result r
|
r.green,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
r.gold,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
r.peer_reviewed,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.abstract as abstract,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, o.name;
|
r.authors > 1 as multiple_authors,
|
||||||
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
d.name as dname, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, d.name, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_organization_country stored as parquet as
|
create table ${observatory_db_name}.result_deposited_organization stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, o.name as oname, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
r.abstract as abstract,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
r.authors > 1 as multiple_authors,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, o.name, c.code, c.name;
|
rpc.count > 1 as multiple_projects,
|
||||||
|
rfc.count > 1 as multiple_funders,
|
||||||
|
r.type,
|
||||||
|
o.name as oname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_funder stored as parquet as
|
create table ${observatory_db_name}.result_deposited_organization_country stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, p.funder as pfunder
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
join SOURCE.result_projects rp on rp.id=r.id
|
r.abstract as abstract,
|
||||||
join SOURCE.project p on p.id=rp.project
|
r.authors > 1 as multiple_authors,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
rpc.count > 1 as multiple_projects,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
rfc.count > 1 as multiple_funders,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, p.funder;
|
r.type,
|
||||||
|
o.name as oname, c.code as ccode, c.name as cname
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, o.name, c.code, c.name;
|
||||||
|
|
||||||
create table TARGET.result_deposited_funder_country stored as parquet as
|
create table ${observatory_db_name}.result_deposited_funder stored as parquet as
|
||||||
select count(distinct r.id) as total, r.green, r.gold, case when rl.type is not null then true else false end as licence,
|
select
|
||||||
case when pids.pid is not null then true else false end as pid, case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
count(distinct r.id) as total,
|
||||||
r.peer_reviewed, r.type, p.funder as pfunder, c.code as ccode, c.name as cname
|
r.green,
|
||||||
from SOURCE.result r
|
r.gold,
|
||||||
join SOURCE.result_datasources rd on rd.id=r.id
|
case when rl.type is not null then true else false end as licence,
|
||||||
join SOURCE.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
case when pids.pid is not null then true else false end as pid,
|
||||||
join SOURCE.datasource_organizations dor on dor.id=d.id
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
join SOURCE.organization o on o.id=dor.organization
|
r.peer_reviewed,
|
||||||
join SOURCE.country c on c.code=o.country and c.continent_name='Europe'
|
rln.cc_licence,
|
||||||
join SOURCE.result_projects rp on rp.id=r.id
|
r.abstract as abstract,
|
||||||
join SOURCE.project p on p.id=rp.project
|
r.authors > 1 as multiple_authors,
|
||||||
left outer join SOURCE.result_licenses rl on rl.id=r.id
|
rpc.count > 1 as multiple_projects,
|
||||||
left outer join SOURCE.result_pids pids on pids.id=r.id
|
rfc.count > 1 as multiple_funders,
|
||||||
group by r.green, r.gold, licence, pid, oa, r.peer_reviewed, r.type, p.funder, c.code, c.name;
|
r.type,
|
||||||
|
p.funder as pfunder
|
||||||
|
from ${stats_db_name}.result r
|
||||||
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
join ${stats_db_name}.result_projects rp on rp.id=r.id
|
||||||
|
join ${stats_db_name}.project p on p.id=rp.project
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder;
|
||||||
|
|
||||||
compute stats TARGET.result_affiliated_country;
|
create table ${observatory_db_name}.result_deposited_funder_country stored as parquet as
|
||||||
compute stats TARGET.result_affiliated_year;
|
select
|
||||||
compute stats TARGET.result_affiliated_year_country;
|
count(distinct r.id) as total,
|
||||||
compute stats TARGET.result_affiliated_datasource;
|
r.green,
|
||||||
compute stats TARGET.result_affiliated_datasource_country;
|
r.gold,
|
||||||
compute stats TARGET.result_affiliated_organization;
|
case when rl.type is not null then true else false end as licence,
|
||||||
compute stats TARGET.result_affiliated_organization_country;
|
case when pids.pid is not null then true else false end as pid,
|
||||||
compute stats TARGET.result_affiliated_funder;
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end as oa,
|
||||||
compute stats TARGET.result_affiliated_funder_country;
|
r.peer_reviewed,
|
||||||
compute stats TARGET.result_deposited_country;
|
rln.cc_licence,
|
||||||
compute stats TARGET.result_deposited_year;
|
r.abstract as abstract,
|
||||||
compute stats TARGET.result_deposited_year_country;
|
r.authors > 1 as multiple_authors,
|
||||||
compute stats TARGET.result_deposited_datasource;
|
rpc.count > 1 as multiple_projects,
|
||||||
compute stats TARGET.result_deposited_datasource_country;
|
rfc.count > 1 as multiple_funders,
|
||||||
compute stats TARGET.result_deposited_organization;
|
r.type,
|
||||||
compute stats TARGET.result_deposited_organization_country;
|
p.funder as pfunder, c.code as ccode, c.name as cname
|
||||||
compute stats TARGET.result_deposited_funder;
|
from ${stats_db_name}.result r
|
||||||
compute stats TARGET.result_deposited_funder_country;
|
join ${stats_db_name}.result_datasources rd on rd.id=r.id
|
||||||
|
join ${stats_db_name}.datasource d on d.id=rd.datasource and d.type in ('Institutional Repository','Data Repository', 'Repository', 'Publication Repository')
|
||||||
|
join ${stats_db_name}.datasource_organizations dor on dor.id=d.id
|
||||||
|
join ${stats_db_name}.organization o on o.id=dor.organization
|
||||||
|
join ${stats_db_name}.country c on c.code=o.country and c.continent_name='Europe'
|
||||||
|
join ${stats_db_name}.result_projects rp on rp.id=r.id
|
||||||
|
join ${stats_db_name}.project p on p.id=rp.project
|
||||||
|
left outer join ${stats_db_name}.result_licenses rl on rl.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_pids pids on pids.id=r.id
|
||||||
|
left outer join ${observatory_db_name}.result_cc_licence rln on rln.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_projectcount rpc on rpc.id=r.id
|
||||||
|
left outer join ${stats_db_name}.result_fundercount rfc on rfc.id=r.id
|
||||||
|
group by r.green, r.gold, case when rl.type is not null then true else false end, case when pids.pid is not null then true else false end,
|
||||||
|
case when r.access_mode in ('Open Access', 'Open Source') then true else false end, r.peer_reviewed, r.type, abstract,
|
||||||
|
cc_licence, r.authors > 1, rpc.count > 1, rfc.count > 1, p.funder, c.code, c.name;
|
|
@ -239,14 +239,51 @@
|
||||||
<param>stats_db_name=${stats_db_name}</param>
|
<param>stats_db_name=${stats_db_name}</param>
|
||||||
<param>openaire_db_name=${openaire_db_name}</param>
|
<param>openaire_db_name=${openaire_db_name}</param>
|
||||||
</hive2>
|
</hive2>
|
||||||
<ok to="Step16"/>
|
<ok to="Step15_5"/>
|
||||||
<error to="Kill"/>
|
<error to="Kill"/>
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
<action name="Step16">
|
<action name="Step15_5">
|
||||||
<hive2 xmlns="uri:oozie:hive2-action:0.1">
|
<hive2 xmlns="uri:oozie:hive2-action:0.1">
|
||||||
<jdbc-url>${hive_jdbc_url}</jdbc-url>
|
<jdbc-url>${hive_jdbc_url}</jdbc-url>
|
||||||
<script>scripts/step16.sql</script>
|
<script>scripts/step15_5.sql</script>
|
||||||
|
<param>stats_db_name=${stats_db_name}</param>
|
||||||
|
<param>openaire_db_name=${openaire_db_name}</param>
|
||||||
|
</hive2>
|
||||||
|
<ok to="Contexts"/>
|
||||||
|
<error to="Kill"/>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="Contexts">
|
||||||
|
<shell xmlns="uri:oozie:shell-action:0.1">
|
||||||
|
<job-tracker>${jobTracker}</job-tracker>
|
||||||
|
<name-node>${nameNode}</name-node>
|
||||||
|
<exec>contexts.sh</exec>
|
||||||
|
<argument>${context_api_url}</argument>
|
||||||
|
<argument>${stats_db_name}</argument>
|
||||||
|
<file>contexts.sh</file>
|
||||||
|
</shell>
|
||||||
|
<ok to="Step16-createIndicatorsTables"/>
|
||||||
|
<error to="Kill"/>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="Step16-createIndicatorsTables">
|
||||||
|
<shell xmlns="uri:oozie:shell-action:0.1">
|
||||||
|
<job-tracker>${jobTracker}</job-tracker>
|
||||||
|
<name-node>${nameNode}</name-node>
|
||||||
|
<exec>indicators.sh</exec>
|
||||||
|
<argument>${stats_db_name}</argument>
|
||||||
|
<argument>${wf:appPath()}/scripts/step16-createIndicatorsTables.sql</argument>
|
||||||
|
<file>indicators.sh</file>
|
||||||
|
</shell>
|
||||||
|
<ok to="Step16_1-definitions"/>
|
||||||
|
<error to="Kill"/>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="Step16_1-definitions">
|
||||||
|
<hive2 xmlns="uri:oozie:hive2-action:0.1">
|
||||||
|
<jdbc-url>${hive_jdbc_url}</jdbc-url>
|
||||||
|
<script>scripts/step16_1-definitions.sql</script>
|
||||||
<param>stats_db_name=${stats_db_name}</param>
|
<param>stats_db_name=${stats_db_name}</param>
|
||||||
<param>openaire_db_name=${openaire_db_name}</param>
|
<param>openaire_db_name=${openaire_db_name}</param>
|
||||||
</hive2>
|
</hive2>
|
||||||
|
@ -261,48 +298,11 @@
|
||||||
<param>stats_db_name=${stats_db_name}</param>
|
<param>stats_db_name=${stats_db_name}</param>
|
||||||
<param>openaire_db_name=${openaire_db_name}</param>
|
<param>openaire_db_name=${openaire_db_name}</param>
|
||||||
</hive2>
|
</hive2>
|
||||||
<ok to="Step16_6"/>
|
<ok to="Step19-finalize"/>
|
||||||
<error to="Kill"/>
|
<error to="Kill"/>
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
<action name="Step16_6">
|
<action name="Step19-finalize">
|
||||||
<hive2 xmlns="uri:oozie:hive2-action:0.1">
|
|
||||||
<jdbc-url>${hive_jdbc_url}</jdbc-url>
|
|
||||||
<script>scripts/step16_6.sql</script>
|
|
||||||
<param>stats_db_name=${stats_db_name}</param>
|
|
||||||
<param>openaire_db_name=${openaire_db_name}</param>
|
|
||||||
</hive2>
|
|
||||||
<ok to="Step16_7-createIndicatorsTables"/>
|
|
||||||
<error to="Kill"/>
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<action name="Step16_7-createIndicatorsTables">
|
|
||||||
<shell xmlns="uri:oozie:shell-action:0.1">
|
|
||||||
<job-tracker>${jobTracker}</job-tracker>
|
|
||||||
<name-node>${nameNode}</name-node>
|
|
||||||
<exec>indicators.sh</exec>
|
|
||||||
<argument>${stats_db_name}</argument>
|
|
||||||
<argument>${wf:appPath()}/scripts/step16_7-createIndicatorsTables.sql</argument>
|
|
||||||
<file>indicators.sh</file>
|
|
||||||
</shell>
|
|
||||||
<ok to="Step17"/>
|
|
||||||
<error to="Kill"/>
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<action name="Step17">
|
|
||||||
<shell xmlns="uri:oozie:shell-action:0.1">
|
|
||||||
<job-tracker>${jobTracker}</job-tracker>
|
|
||||||
<name-node>${nameNode}</name-node>
|
|
||||||
<exec>contexts.sh</exec>
|
|
||||||
<argument>${context_api_url}</argument>
|
|
||||||
<argument>${stats_db_name}</argument>
|
|
||||||
<file>contexts.sh</file>
|
|
||||||
</shell>
|
|
||||||
<ok to="Step19"/>
|
|
||||||
<error to="Kill"/>
|
|
||||||
</action>
|
|
||||||
|
|
||||||
<action name="Step19">
|
|
||||||
<shell xmlns="uri:oozie:shell-action:0.1">
|
<shell xmlns="uri:oozie:shell-action:0.1">
|
||||||
<job-tracker>${jobTracker}</job-tracker>
|
<job-tracker>${jobTracker}</job-tracker>
|
||||||
<name-node>${nameNode}</name-node>
|
<name-node>${nameNode}</name-node>
|
||||||
|
@ -326,20 +326,44 @@
|
||||||
<argument>${wf:appPath()}/scripts/step20-createMonitorDB.sql</argument>
|
<argument>${wf:appPath()}/scripts/step20-createMonitorDB.sql</argument>
|
||||||
<file>monitor.sh</file>
|
<file>monitor.sh</file>
|
||||||
</shell>
|
</shell>
|
||||||
|
<ok to="step21-createObservatoryDB-pre"/>
|
||||||
|
<error to="Kill"/>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="step21-createObservatoryDB-pre">
|
||||||
|
<shell xmlns="uri:oozie:shell-action:0.1">
|
||||||
|
<job-tracker>${jobTracker}</job-tracker>
|
||||||
|
<name-node>${nameNode}</name-node>
|
||||||
|
<exec>observatory-pre.sh</exec>
|
||||||
|
<argument>${stats_db_name}</argument>
|
||||||
|
<argument>${observatory_db_name}</argument>
|
||||||
|
<argument>${observatory_db_shadow_name}</argument>
|
||||||
|
<file>observatory-pre.sh</file>
|
||||||
|
</shell>
|
||||||
<ok to="step21-createObservatoryDB"/>
|
<ok to="step21-createObservatoryDB"/>
|
||||||
<error to="Kill"/>
|
<error to="Kill"/>
|
||||||
</action>
|
</action>
|
||||||
|
|
||||||
<action name="step21-createObservatoryDB">
|
<action name="step21-createObservatoryDB">
|
||||||
|
<hive2 xmlns="uri:oozie:hive2-action:0.1">
|
||||||
|
<jdbc-url>${hive_jdbc_url}</jdbc-url>
|
||||||
|
<script>scripts/step21-createObservatoryDB.sql</script>
|
||||||
|
<param>stats_db_name=${stats_db_name}</param>
|
||||||
|
<param>observatory_db_name=${observatory_db_name}</param>
|
||||||
|
</hive2>
|
||||||
|
<ok to="step21-createObservatoryDB-post"/>
|
||||||
|
<error to="Kill"/>
|
||||||
|
</action>
|
||||||
|
|
||||||
|
<action name="step21-createObservatoryDB-post">
|
||||||
<shell xmlns="uri:oozie:shell-action:0.1">
|
<shell xmlns="uri:oozie:shell-action:0.1">
|
||||||
<job-tracker>${jobTracker}</job-tracker>
|
<job-tracker>${jobTracker}</job-tracker>
|
||||||
<name-node>${nameNode}</name-node>
|
<name-node>${nameNode}</name-node>
|
||||||
<exec>observatory.sh</exec>
|
<exec>observatory-post.sh</exec>
|
||||||
<argument>${stats_db_name}</argument>
|
<argument>${stats_db_name}</argument>
|
||||||
<argument>${observatory_db_name}</argument>
|
<argument>${observatory_db_name}</argument>
|
||||||
<argument>${observatory_db_shadow_name}</argument>
|
<argument>${observatory_db_shadow_name}</argument>
|
||||||
<argument>${wf:appPath()}/scripts/step21-createObservatoryDB.sql</argument>
|
<file>observatory-post.sh</file>
|
||||||
<file>observatory.sh</file>
|
|
||||||
</shell>
|
</shell>
|
||||||
<ok to="Step22"/>
|
<ok to="Step22"/>
|
||||||
<error to="Kill"/>
|
<error to="Kill"/>
|
||||||
|
|
Loading…
Reference in New Issue